--- /dev/null
+package com.irtimaled.bbor.mixin.client;
+
+import com.irtimaled.bbor.client.ClientProxy;
+import com.irtimaled.bbor.client.keyboard.KeyListener;
+import net.minecraft.client.GameSettings;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.settings.KeyBinding;
+import org.apache.commons.lang3.ArrayUtils;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Mutable;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import java.io.File;
+
+@Mixin(GameSettings.class)
+public abstract class MixinGameSettings {
+ @Mutable
+ @Final
+ @Shadow
+ public KeyBinding[] keyBindings;
+
+ @Shadow
+ public abstract void loadOptions();
+
+ @Inject(method = "<init>", at = @At("RETURN"))
+ private void init(Minecraft minecraft, File file, CallbackInfo ci) {
+ ClientProxy.registerKeyBindings();
+ keyBindings = ArrayUtils.addAll(keyBindings, KeyListener.keyBindings());
+ this.loadOptions();
+ }
+
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.entity;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.entity.player.ClientPlayerEntity;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(ClientPlayerEntity.class)
-public abstract class MixinEntityPlayerSP {
- @Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true)
- private void sendChatMessage(String message, CallbackInfo ci) {
- if (ClientInterop.interceptChatMessage(message))
- ci.cancel();
- }
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.entity.player;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.entity.player.ClientPlayerEntity;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ClientPlayerEntity.class)
+public class MixinClientPlayerEntity {
+ @Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true)
+ private void sendChatMessage(String message, CallbackInfo ci) {
+ if (ClientInterop.interceptChatMessage(message))
+ ci.cancel();
+ }
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.gui;
-
-import com.irtimaled.bbor.client.gui.ListScreen;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.screen.ChatScreen;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-@Mixin(ChatScreen.class)
-public class MixinGuiChat {
- @Inject(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;displayGuiScreen(Lnet/minecraft/client/gui/screen/Screen;)V", shift = At.Shift.BEFORE), cancellable = true)
- private void keyPressed(CallbackInfoReturnable<Boolean> cir) {
- if (Minecraft.getInstance().currentScreen instanceof ListScreen) {
- cir.setReturnValue(true);
- cir.cancel();
- }
- }
-}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.gui;
-
-import com.irtimaled.bbor.client.gui.SettingsScreenButton;
-import net.minecraft.client.gui.screen.OptionsScreen;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.widget.Widget;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(OptionsScreen.class)
-public class MixinGuiOptions extends Screen {
- private MixinGuiOptions() {
- super(null);
- }
-
- @Inject(method = "init", at = @At("RETURN"))
- private void initGui(CallbackInfo ci) {
- //shuffle middle buttons up by 12 px to make space
- int top = this.height / 6 + 42;
- int bottom = this.height / 6 + 168;
-
- for (Widget button : buttons) {
- if (button.y >= top && button.y < bottom)
- button.y -= 12;
- }
- SettingsScreenButton button = new SettingsScreenButton(this.width / 2 - 155, top + 84, 150, "BBOR", this);
- this.buttons.add(this.buttons.size() - 1, button);
- this.children.add(this.children.size() - 1, button);
- }
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.gui.screen;
+
+import com.irtimaled.bbor.client.gui.ListScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.screen.ChatScreen;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+@Mixin(ChatScreen.class)
+public class MixinChatScreen {
+ @Inject(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;displayGuiScreen(Lnet/minecraft/client/gui/screen/Screen;)V", shift = At.Shift.BEFORE), cancellable = true)
+ private void keyPressed(CallbackInfoReturnable<Boolean> cir) {
+ if (Minecraft.getInstance().currentScreen instanceof ListScreen) {
+ cir.setReturnValue(true);
+ cir.cancel();
+ }
+ }
+}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.gui.screen;
+
+import com.irtimaled.bbor.client.gui.SettingsScreenButton;
+import net.minecraft.client.gui.screen.OptionsScreen;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.widget.Widget;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(OptionsScreen.class)
+public class MixinOptionsScreen extends Screen {
+ private MixinOptionsScreen() {
+ super(null);
+ }
+
+ @Inject(method = "init", at = @At("RETURN"))
+ private void initGui(CallbackInfo ci) {
+ //shuffle middle buttons up by 12 px to make space
+ int top = this.height / 6 + 42;
+ int bottom = this.height / 6 + 168;
+
+ for (Widget button : buttons) {
+ if (button.y >= top && button.y < bottom)
+ button.y -= 12;
+ }
+ SettingsScreenButton button = new SettingsScreenButton(this.width / 2 - 155, top + 84, 150, "BBOR", this);
+ this.buttons.add(this.buttons.size() - 1, button);
+ this.children.add(this.children.size() - 1, button);
+ }
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.multiplayer;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.world.ClientWorld;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(ClientWorld.class)
-public class MixinWorldClient {
- @Inject(method = "sendQuittingDisconnectingPacket", at = @At("RETURN"))
- private void sendQuittingDisconnectingPacket(CallbackInfo ci) {
- ClientInterop.disconnectedFromRemoteServer();
- }
-}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.network;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.network.login.ClientLoginNetHandler;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(ClientLoginNetHandler.class)
-public abstract class MixinNetHandlerLoginClient {
- @Inject(method = "onDisconnect", at = @At("HEAD"))
- private void onDisconnect(CallbackInfo ci) {
- ClientInterop.disconnectedFromRemoteServer();
- }
-}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.network;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.network.play.ClientPlayNetHandler;
-import net.minecraft.network.play.server.SChunkDataPacket;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(ClientPlayNetHandler.class)
-public class MixinNetHandlerPlayClient {
- @Inject(method = "onDisconnect", at = @At("HEAD"))
- private void onDisconnect(CallbackInfo ci) {
- ClientInterop.disconnectedFromRemoteServer();
- }
-
- @Inject(method = "handleChunkData", at = @At("RETURN"))
- private void onChunkData(SChunkDataPacket packet, CallbackInfo ci) {
- ClientInterop.receivedChunk(packet.getChunkX(), packet.getChunkZ());
- }
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.network.login;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.network.login.ClientLoginNetHandler;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ClientLoginNetHandler.class)
+public class MixinClientLoginNetHandler {
+ @Inject(method = "onDisconnect", at = @At("HEAD"))
+ private void onDisconnect(CallbackInfo ci) {
+ ClientInterop.disconnectedFromRemoteServer();
+ }
+}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.network.play;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.network.play.ClientPlayNetHandler;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ClientPlayNetHandler.class)
+public class MixinClientPlayNetHandler {
+ @Inject(method = "onDisconnect", at = @At("HEAD"))
+ private void onDisconnect(CallbackInfo ci) {
+ ClientInterop.disconnectedFromRemoteServer();
+ }
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.renderer;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.GameRenderer;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(GameRenderer.class)
-public class MixinEntityRenderer {
- @Shadow
- @Final
- private Minecraft mc;
-
- @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", args = "ldc=hand", shift = At.Shift.BEFORE))
- private void render(float partialTicks, long ignored, CallbackInfo ci) {
- ClientInterop.render(partialTicks, this.mc.player);
- }
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.renderer;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.GameRenderer;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(GameRenderer.class)
+public class MixinGameRenderer {
+ @Shadow
+ @Final
+ private Minecraft mc;
+
+ @Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/profiler/IProfiler;endStartSection(Ljava/lang/String;)V", args = "ldc=hand", shift = At.Shift.BEFORE))
+ private void render(float partialTicks, long ignored, CallbackInfo ci) {
+ ClientInterop.render(partialTicks, this.mc.player);
+ }
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.client.settings;
-
-import com.irtimaled.bbor.client.ClientProxy;
-import com.irtimaled.bbor.client.keyboard.KeyListener;
-import net.minecraft.client.GameSettings;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.settings.KeyBinding;
-import org.apache.commons.lang3.ArrayUtils;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Mutable;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-import java.io.File;
-
-@Mixin(GameSettings.class)
-public abstract class MixinGameSettings {
- @Mutable
- @Final
- @Shadow
- public KeyBinding[] keyBindings;
-
- @Shadow
- public abstract void loadOptions();
-
- @Inject(method = "<init>", at = @At("RETURN"))
- private void init(Minecraft minecraft, File file, CallbackInfo ci) {
- ClientProxy.registerKeyBindings();
- keyBindings = ArrayUtils.addAll(keyBindings, KeyListener.keyBindings());
- this.loadOptions();
- }
-
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.client.world;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.world.ClientWorld;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ClientWorld.class)
+public class MixinClientWorld {
+ @Inject(method = "sendQuittingDisconnectingPacket", at = @At("RETURN"))
+ private void sendQuittingDisconnectingPacket(CallbackInfo ci) {
+ ClientInterop.disconnectedFromRemoteServer();
+ }
+}
--- /dev/null
+package com.irtimaled.bbor.mixin.network.play.client;
+
+import com.irtimaled.bbor.common.interop.CommonInterop;
+import com.irtimaled.bbor.common.messages.SubscribeToServer;
+import net.minecraft.network.play.IServerPlayNetHandler;
+import net.minecraft.network.play.ServerPlayNetHandler;
+import net.minecraft.network.play.client.CCustomPayloadPacket;
+import net.minecraft.util.ResourceLocation;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+@Mixin(CCustomPayloadPacket.class)
+public class MixinCCustomPayloadPacket {
+ @Shadow
+ private ResourceLocation channel;
+
+ @Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/IServerPlayNetHandler;processCustomPayload(Lnet/minecraft/network/play/client/CCustomPayloadPacket;)V"))
+ private void processPacket(IServerPlayNetHandler netHandlerPlayServer, CCustomPayloadPacket packet) {
+ if (this.channel.toString().equals(SubscribeToServer.NAME)) {
+ CommonInterop.playerSubscribed(((ServerPlayNetHandler) netHandlerPlayServer).player);
+ } else {
+ netHandlerPlayServer.processCustomPayload(packet);
+ }
+ }
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.network.play.client;
-
-import com.irtimaled.bbor.common.interop.CommonInterop;
-import com.irtimaled.bbor.common.messages.SubscribeToServer;
-import net.minecraft.network.play.IServerPlayNetHandler;
-import net.minecraft.network.play.ServerPlayNetHandler;
-import net.minecraft.network.play.client.CCustomPayloadPacket;
-import net.minecraft.util.ResourceLocation;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-@Mixin(CCustomPayloadPacket.class)
-public class MixinCPacketCustomPayload {
- @Shadow
- private ResourceLocation channel;
-
- @Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/IServerPlayNetHandler;processCustomPayload(Lnet/minecraft/network/play/client/CCustomPayloadPacket;)V"))
- private void processPacket(IServerPlayNetHandler netHandlerPlayServer, CCustomPayloadPacket packet) {
- if (this.channel.toString().equals(SubscribeToServer.NAME)) {
- CommonInterop.playerSubscribed(((ServerPlayNetHandler) netHandlerPlayServer).player);
- } else {
- netHandlerPlayServer.processCustomPayload(packet);
- }
- }
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.network.play.server;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.network.play.server.SChatPacket;
+import net.minecraft.util.text.ITextComponent;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(SChatPacket.class)
+public class MixinSChatPacket {
+ @Shadow
+ private ITextComponent chatComponent;
+
+ @Inject(method = "processPacket", at = @At("RETURN"))
+ private void processPacket(CallbackInfo ci) {
+ ClientInterop.handleSeedMessage(this.chatComponent);
+ }
+}
--- /dev/null
+package com.irtimaled.bbor.mixin.network.play.server;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.network.play.IClientPlayNetHandler;
+import net.minecraft.network.play.server.SChunkDataPacket;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(SChunkDataPacket.class)
+public class MixinSChunkDataPacket {
+ @Shadow
+ private int chunkX;
+
+ @Shadow
+ private int chunkZ;
+
+ @Inject(method = "processPacket", at = @At("RETURN"))
+ private void processPacket(IClientPlayNetHandler netHandlerPlayClient, CallbackInfo ci) {
+ ClientInterop.receivedChunk(this.chunkX, this.chunkZ);
+ }
+}
--- /dev/null
+package com.irtimaled.bbor.mixin.network.play.server;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import com.irtimaled.bbor.common.TypeHelper;
+import net.minecraft.client.network.play.ClientPlayNetHandler;
+import net.minecraft.client.network.play.IClientPlayNetHandler;
+import net.minecraft.network.play.server.SCommandListPacket;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(SCommandListPacket.class)
+public class MixinSCommandListPacket {
+ @Inject(method = "processPacket", at = @At("RETURN"))
+ private void processPacket(IClientPlayNetHandler netHandlerPlayClient, CallbackInfo ci) {
+ TypeHelper.doIfType(netHandlerPlayClient, ClientPlayNetHandler.class, handler ->
+ ClientInterop.registerClientCommands(handler.func_195515_i()));
+ }
+}
--- /dev/null
+package com.irtimaled.bbor.mixin.network.play.server;
+
+import com.irtimaled.bbor.common.EventBus;
+import com.irtimaled.bbor.common.messages.AddBoundingBox;
+import com.irtimaled.bbor.common.messages.InitializeClient;
+import com.irtimaled.bbor.common.messages.PayloadReader;
+import com.irtimaled.bbor.common.messages.SubscribeToServer;
+import net.minecraft.client.network.play.ClientPlayNetHandler;
+import net.minecraft.client.network.play.IClientPlayNetHandler;
+import net.minecraft.network.PacketBuffer;
+import net.minecraft.network.play.server.SCustomPayloadPlayPacket;
+import net.minecraft.util.ResourceLocation;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+@Mixin(SCustomPayloadPlayPacket.class)
+public abstract class MixinSCustomPayloadPlayPacket {
+ @Shadow
+ private ResourceLocation channel;
+
+ @Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/play/IClientPlayNetHandler;handleCustomPayload(Lnet/minecraft/network/play/server/SCustomPayloadPlayPacket;)V"))
+ private void processPacket(IClientPlayNetHandler netHandlerPlayClient, SCustomPayloadPlayPacket packet) {
+ String channelName = channel.toString();
+ if (channelName.startsWith("bbor:")) {
+ PacketBuffer data = null;
+ try {
+ data = packet.getBufferData();
+ PayloadReader reader = new PayloadReader(data);
+ switch (channelName) {
+ case InitializeClient.NAME: {
+ EventBus.publish(InitializeClient.getEvent(reader));
+ ((ClientPlayNetHandler) netHandlerPlayClient).sendPacket(SubscribeToServer.getPayload().build());
+ break;
+ }
+ case AddBoundingBox.NAME:
+ case AddBoundingBox.LEGACY: {
+ EventBus.publish(AddBoundingBox.getEvent(reader, channelName));
+ break;
+ }
+ }
+ } finally {
+ if (data != null)
+ data.release();
+ }
+ } else {
+ netHandlerPlayClient.handleCustomPayload(packet);
+ }
+ }
+}
+++ /dev/null
-package com.irtimaled.bbor.mixin.network.play.server;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.network.play.server.SChatPacket;
-import net.minecraft.util.text.ITextComponent;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(SChatPacket.class)
-public class MixinSPacketChat {
- @Shadow
- private ITextComponent chatComponent;
-
- @Inject(method = "processPacket", at = @At("RETURN"))
- private void processPacket(CallbackInfo ci) {
- ClientInterop.handleSeedMessage(this.chatComponent);
- }
-}
+++ /dev/null
-package com.irtimaled.bbor.mixin.network.play.server;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import com.irtimaled.bbor.common.TypeHelper;
-import net.minecraft.client.network.play.ClientPlayNetHandler;
-import net.minecraft.client.network.play.IClientPlayNetHandler;
-import net.minecraft.network.play.server.SCommandListPacket;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(SCommandListPacket.class)
-public class MixinSPacketCommandList {
- @Inject(method = "processPacket", at = @At("RETURN"))
- private void processPacket(IClientPlayNetHandler netHandlerPlayClient, CallbackInfo ci) {
- TypeHelper.doIfType(netHandlerPlayClient, ClientPlayNetHandler.class, handler ->
- ClientInterop.registerClientCommands(handler.func_195515_i()));
- }
-}
+++ /dev/null
-package com.irtimaled.bbor.mixin.network.play.server;
-
-import com.irtimaled.bbor.common.EventBus;
-import com.irtimaled.bbor.common.messages.AddBoundingBox;
-import com.irtimaled.bbor.common.messages.InitializeClient;
-import com.irtimaled.bbor.common.messages.PayloadReader;
-import com.irtimaled.bbor.common.messages.SubscribeToServer;
-import net.minecraft.client.network.play.ClientPlayNetHandler;
-import net.minecraft.client.network.play.IClientPlayNetHandler;
-import net.minecraft.network.PacketBuffer;
-import net.minecraft.network.play.server.SCustomPayloadPlayPacket;
-import net.minecraft.util.ResourceLocation;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-@Mixin(SCustomPayloadPlayPacket.class)
-public abstract class MixinSPacketCustomPayload {
- @Shadow
- private ResourceLocation channel;
-
- @Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/play/IClientPlayNetHandler;handleCustomPayload(Lnet/minecraft/network/play/server/SCustomPayloadPlayPacket;)V"))
- private void processPacket(IClientPlayNetHandler netHandlerPlayClient, SCustomPayloadPlayPacket packet) {
- String channelName = channel.toString();
- if (channelName.startsWith("bbor:")) {
- PacketBuffer data = null;
- try {
- data = packet.getBufferData();
- PayloadReader reader = new PayloadReader(data);
- switch (channelName) {
- case InitializeClient.NAME: {
- EventBus.publish(InitializeClient.getEvent(reader));
- ((ClientPlayNetHandler) netHandlerPlayClient).sendPacket(SubscribeToServer.getPayload().build());
- break;
- }
- case AddBoundingBox.NAME:
- case AddBoundingBox.LEGACY: {
- EventBus.publish(AddBoundingBox.getEvent(reader, channelName));
- break;
- }
- }
- } finally {
- if (data != null)
- data.release();
- }
- } else {
- netHandlerPlayClient.handleCustomPayload(packet);
- }
- }
-}
+++ /dev/null
-package com.irtimaled.bbor.mixin.network.play.server;
-
-import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.network.play.server.SSpawnPositionPacket;
-import net.minecraft.util.math.BlockPos;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-@Mixin(SSpawnPositionPacket.class)
-public abstract class MixinSPacketSpawnPosition {
- @Shadow
- private BlockPos spawnBlockPos;
-
- @Inject(method = "processPacket", at = @At("RETURN"))
- private void afterProcessPacket(CallbackInfo ci) {
- ClientInterop.updateWorldSpawnReceived(spawnBlockPos);
- }
-}
--- /dev/null
+package com.irtimaled.bbor.mixin.network.play.server;
+
+import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.network.play.server.SSpawnPositionPacket;
+import net.minecraft.util.math.BlockPos;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(SSpawnPositionPacket.class)
+public abstract class MixinSSpawnPositionPacket {
+ @Shadow
+ private BlockPos spawnBlockPos;
+
+ @Inject(method = "processPacket", at = @At("RETURN"))
+ private void afterProcessPacket(CallbackInfo ci) {
+ ClientInterop.updateWorldSpawnReceived(spawnBlockPos);
+ }
+}
"package": "com.irtimaled.bbor.mixin",
"refmap": "mixins.bbor.refmap.json",
"mixins": [
- "network.play.client.MixinCPacketCustomPayload",
+ "network.play.client.MixinCCustomPayloadPacket",
"server.MixinMinecraftServer",
"server.management.MixinPlayerList",
"world.chunk.MixinChunk"
],
"client": [
+ "client.MixinGameSettings",
"client.MixinMinecraft",
- "client.entity.MixinEntityPlayerSP",
- "client.gui.MixinGuiChat",
- "client.gui.MixinGuiOptions",
- "client.multiplayer.MixinWorldClient",
- "client.network.MixinNetHandlerLoginClient",
- "client.network.MixinNetHandlerPlayClient",
- "client.renderer.MixinEntityRenderer",
- "client.settings.MixinGameSettings",
+ "client.entity.player.MixinClientPlayerEntity",
+ "client.gui.screen.MixinChatScreen",
+ "client.gui.screen.MixinOptionsScreen",
+ "client.network.login.MixinClientLoginNetHandler",
+ "client.network.play.MixinClientPlayNetHandler",
+ "client.renderer.MixinGameRenderer",
+ "client.world.MixinClientWorld",
"client.settings.MixinKeyBinding",
- "network.play.server.MixinSPacketChat",
- "network.play.server.MixinSPacketCommandList",
- "network.play.server.MixinSPacketCustomPayload",
- "network.play.server.MixinSPacketSpawnPosition"
+ "network.play.server.MixinSChatPacket",
+ "network.play.server.MixinSChunkDataPacket",
+ "network.play.server.MixinSCommandListPacket",
+ "network.play.server.MixinSCustomPayloadPlayPacket",
+ "network.play.server.MixinSSpawnPositionPacket"
],
"server": [
"server.dedicated.MixinDedicatedServer"