From 8a52501d02dfe570c24d75055ff13c8d6dc860b2 Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 15:53:51 +0100 Subject: [PATCH 1/7] refactor packets & use gtnhlib SyncedKeybind --- dependencies.gradle | 2 +- src/main/java/xonin/backhand/Backhand.java | 4 +- src/main/java/xonin/backhand/CommonProxy.java | 24 +++-- .../backhand/api/core/BackhandUtils.java | 14 +-- .../backhand/client/ClientEventHandler.java | 11 +-- .../xonin/backhand/client/ClientProxy.java | 15 --- .../minecraft/MixinEntityLivingBase.java | 3 +- .../early/minecraft/MixinEntityPlayer.java | 4 +- .../xonin/backhand/packet/AbstractPacket.java | 27 ------ .../packet/BackhandPacketHandler.java | 91 +++++-------------- .../packet/OffhandSwapClientPacket.java | 52 ----------- .../backhand/packet/OffhandSwapPacket.java | 51 ----------- .../packet/OffhandSyncItemPacket.java | 62 ++++++------- .../packet/OffhandSyncOffhandUse.java | 40 +++++--- .../resources/assets/backhand/lang/en_US.lang | 3 +- 15 files changed, 108 insertions(+), 295 deletions(-) delete mode 100644 src/main/java/xonin/backhand/packet/AbstractPacket.java delete mode 100644 src/main/java/xonin/backhand/packet/OffhandSwapClientPacket.java delete mode 100644 src/main/java/xonin/backhand/packet/OffhandSwapPacket.java diff --git a/dependencies.gradle b/dependencies.gradle index f3662c0..00c6184 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -34,7 +34,7 @@ * For more details, see https://docs.gradle.org/8.0.1/userguide/java_library_plugin.html#sec:java_library_configurations_graph */ dependencies { - api("com.github.GTNewHorizons:GTNHLib:0.6.3:dev") + api("com.github.GTNewHorizons:GTNHLib:0.6.5:dev") compileOnly("com.github.GTNewHorizons:TinkersConstruct:1.13.4-GTNH:dev") runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.7.23-GTNH:dev") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.0:dev") diff --git a/src/main/java/xonin/backhand/Backhand.java b/src/main/java/xonin/backhand/Backhand.java index 940e1e4..780666a 100644 --- a/src/main/java/xonin/backhand/Backhand.java +++ b/src/main/java/xonin/backhand/Backhand.java @@ -33,7 +33,6 @@ public class Backhand { @SidedProxy(clientSide = "xonin.backhand.client.ClientProxy", serverSide = "xonin.backhand.CommonProxy") public static CommonProxy proxy; - public static BackhandPacketHandler packetHandler; @Mod.EventHandler public void load(FMLPreInitializationEvent event) { @@ -49,8 +48,7 @@ public void load(FMLPreInitializationEvent event) { @Mod.EventHandler public void init(FMLInitializationEvent event) { - packetHandler = new BackhandPacketHandler(); - packetHandler.register(); + BackhandPacketHandler.init(); } public static MinecraftServer getServer() { diff --git a/src/main/java/xonin/backhand/CommonProxy.java b/src/main/java/xonin/backhand/CommonProxy.java index 9643f80..50953e7 100644 --- a/src/main/java/xonin/backhand/CommonProxy.java +++ b/src/main/java/xonin/backhand/CommonProxy.java @@ -9,15 +9,21 @@ import net.minecraftforge.common.util.FakePlayer; import com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber; +import com.gtnewhorizon.gtnhlib.keybind.SyncedKeybind; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; import xonin.backhand.api.core.BackhandUtils; +import xonin.backhand.packet.BackhandPacketHandler; import xonin.backhand.packet.OffhandSyncItemPacket; @EventBusSubscriber public class CommonProxy { + public static final SyncedKeybind SWAP_KEY = SyncedKeybind + .createConfigurable("backhand.swap_offhand", "key.categories.gameplay", 33) + .registerGlobalListener(CommonProxy::swapOffhand); + public void load() {} @SubscribeEvent @@ -36,14 +42,20 @@ public static void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) { @SubscribeEvent public static void addTracking(net.minecraftforge.event.entity.player.PlayerEvent.StartTracking event) { - if (event.entityPlayer instanceof EntityPlayerMP playerMP && isValidPlayer(event.target)) { - Backhand.packetHandler - .sendPacketToPlayer(new OffhandSyncItemPacket((EntityPlayer) event.target).generatePacket(), playerMP); + if (BackhandUtils.isValidPlayer(event.entityPlayer) && BackhandUtils.isValidPlayer(event.target)) { + BackhandPacketHandler.sendPacketToPlayer(new OffhandSyncItemPacket((EntityPlayer) event.target), event.entityPlayer); } } - private static boolean isValidPlayer(@Nullable Entity entity) { - return entity instanceof EntityPlayerMP playerMP - && !(entity instanceof FakePlayer || playerMP.playerNetServerHandler == null); + private static void swapOffhand(EntityPlayerMP player, SyncedKeybind keybind) { + ItemStack offhandItem = BackhandUtils.getOffhandItem(player); + if (Backhand.isOffhandBlacklisted(player.getCurrentEquippedItem()) + || Backhand.isOffhandBlacklisted(offhandItem)) { + return; + } + + BackhandUtils.setPlayerOffhandItem(player, player.getCurrentEquippedItem()); + player.setCurrentItemOrArmor(0, offhandItem); + player.inventoryContainer.detectAndSendChanges(); } } diff --git a/src/main/java/xonin/backhand/api/core/BackhandUtils.java b/src/main/java/xonin/backhand/api/core/BackhandUtils.java index 488ff24..b0ee075 100644 --- a/src/main/java/xonin/backhand/api/core/BackhandUtils.java +++ b/src/main/java/xonin/backhand/api/core/BackhandUtils.java @@ -8,8 +8,11 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.FakePlayer; /** * Store commonly used method, mostly for the {@link EntityPlayer} {@link ItemStack}s management @@ -19,12 +22,6 @@ public final class BackhandUtils { public static final List> offhandPriorityItems = new ArrayList<>(); - public static void swapOffhandItem(EntityPlayer player) { - ItemStack mainHand = player.getCurrentEquippedItem(); - player.setCurrentItemOrArmor(0, BackhandUtils.getOffhandItem(player)); - BackhandUtils.setPlayerOffhandItem(player, mainHand); - } - public static void setPlayerOffhandItem(EntityPlayer player, @Nullable ItemStack stack) { ((IOffhandInventory) player.inventory).backhand$setOffhandItem(stack); } @@ -73,4 +70,9 @@ public static int getOffhandSlot(EntityPlayer player) { public static void addOffhandPriorityItem(Class itemClass) { offhandPriorityItems.add(itemClass); } + + public static boolean isValidPlayer(@Nullable Entity entity) { + return entity instanceof EntityPlayerMP playerMP + && !(entity instanceof FakePlayer || playerMP.playerNetServerHandler == null); + } } diff --git a/src/main/java/xonin/backhand/client/ClientEventHandler.java b/src/main/java/xonin/backhand/client/ClientEventHandler.java index fa9d1ab..cdf156c 100644 --- a/src/main/java/xonin/backhand/client/ClientEventHandler.java +++ b/src/main/java/xonin/backhand/client/ClientEventHandler.java @@ -3,7 +3,6 @@ import static xonin.backhand.utils.Mods.DOUBLE_WIDE_SURPRISE; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.client.gui.GuiIngame; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.RenderHelper; @@ -18,7 +17,6 @@ import net.minecraftforge.client.event.RenderLivingEvent; import net.minecraftforge.client.event.RenderPlayerEvent; -import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -30,9 +28,9 @@ import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.Side; import invtweaks.InvTweaks; +import xonin.backhand.CommonProxy; import xonin.backhand.api.core.BackhandUtils; import xonin.backhand.client.utils.BackhandRenderHelper; -import xonin.backhand.packet.OffhandSwapPacket; import xonin.backhand.utils.BackhandConfig; import xonin.backhand.utils.Mods; @@ -43,7 +41,6 @@ public class ClientEventHandler { public static boolean prevInvTweaksBreakRefill; public static int invTweaksDelay; - public static boolean allowSwap = true; public static int renderPass; @@ -62,12 +59,8 @@ public static void renderHotbarOverlay(RenderGameOverlayEvent event) { @SubscribeEvent public static void onKeyInputEvent(InputEvent.KeyInputEvent event) { Minecraft mc = Minecraft.getMinecraft(); - EntityClientPlayerMP player = mc.thePlayer; - - if (ClientProxy.swapOffhand.getIsKeyPressed() && Keyboard.isKeyDown(Keyboard.getEventKey()) && allowSwap) { - allowSwap = false; + if (mc.currentScreen == null && CommonProxy.SWAP_KEY.isKeyDown(mc.thePlayer)) { invTweaksSwapPatch(); - player.sendQueue.addToSendQueue(new OffhandSwapPacket(player).generatePacket()); } } diff --git a/src/main/java/xonin/backhand/client/ClientProxy.java b/src/main/java/xonin/backhand/client/ClientProxy.java index df5ce15..063695f 100644 --- a/src/main/java/xonin/backhand/client/ClientProxy.java +++ b/src/main/java/xonin/backhand/client/ClientProxy.java @@ -1,22 +1,7 @@ package xonin.backhand.client; -import net.minecraft.client.settings.KeyBinding; - -import org.lwjgl.input.Keyboard; - -import cpw.mods.fml.client.registry.ClientRegistry; import xonin.backhand.CommonProxy; public class ClientProxy extends CommonProxy { - public static final KeyBinding swapOffhand = new KeyBinding( - "Swap Offhand", - Keyboard.KEY_F, - "key.categories.gameplay"); - - @Override - public void load() { - super.load(); - ClientRegistry.registerKeyBinding(swapOffhand); - } } diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java index 55b9351..59eac8c 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java @@ -16,6 +16,7 @@ import xonin.backhand.Backhand; import xonin.backhand.api.core.BackhandUtils; +import xonin.backhand.packet.BackhandPacketHandler; import xonin.backhand.packet.OffhandSyncItemPacket; @Mixin(EntityLivingBase.class) @@ -39,6 +40,6 @@ public MixinEntityLivingBase(World worldIn) { ItemStack offhand = BackhandUtils.getOffhandItem(player); if (ItemStack.areItemStacksEqual(backhand$previousOffhandStack, offhand)) return; backhand$previousOffhandStack = offhand; - Backhand.packetHandler.sendPacketToAllTracking(player, new OffhandSyncItemPacket(player).generatePacket()); + BackhandPacketHandler.sendPacketToAllTracking(player, new OffhandSyncItemPacket(player)); } } diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java index ae998d4..3df1f36 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java @@ -29,6 +29,7 @@ import xonin.backhand.api.core.BackhandUtils; import xonin.backhand.api.core.IBackhandPlayer; import xonin.backhand.api.core.IOffhandInventory; +import xonin.backhand.packet.BackhandPacketHandler; import xonin.backhand.packet.OffhandSyncOffhandUse; @Mixin(EntityPlayer.class) @@ -139,8 +140,7 @@ private MixinEntityPlayer(World p_i1594_1_) { setOffhandItemInUse(state); if (!worldObj.isRemote) { - Backhand.packetHandler - .sendPacketToAllTracking(player, new OffhandSyncOffhandUse(player, state).generatePacket()); + BackhandPacketHandler.sendPacketToAllTracking(player, new OffhandSyncOffhandUse(player, state)); } } diff --git a/src/main/java/xonin/backhand/packet/AbstractPacket.java b/src/main/java/xonin/backhand/packet/AbstractPacket.java deleted file mode 100644 index 6ea5e5b..0000000 --- a/src/main/java/xonin/backhand/packet/AbstractPacket.java +++ /dev/null @@ -1,27 +0,0 @@ -package xonin.backhand.packet; - -import net.minecraft.entity.player.EntityPlayer; - -import cpw.mods.fml.common.network.internal.FMLProxyPacket; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; - -/** - * User: nerd-boy - * Date: 26/06/13 - * Time: 1:35 PM - */ -public abstract class AbstractPacket { - - public final FMLProxyPacket generatePacket() { - ByteBuf buf = Unpooled.buffer(); - write(buf); - return new FMLProxyPacket(buf, getChannel()); - } - - public abstract String getChannel(); - - public abstract void write(ByteBuf out); - - public abstract void process(ByteBuf in, EntityPlayer player); -} diff --git a/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java b/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java index 8248336..15afeba 100644 --- a/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java +++ b/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java @@ -1,92 +1,43 @@ package xonin.backhand.packet; -import java.util.Hashtable; -import java.util.Map; +import java.util.Set; -import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.world.WorldServer; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.network.FMLEventChannel; -import cpw.mods.fml.common.network.FMLNetworkEvent; import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import xonin.backhand.Backhand; +import xonin.backhand.api.core.BackhandUtils; public final class BackhandPacketHandler { - public Map map = new Hashtable<>(); - public Map channels = new Hashtable<>(); + public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(Backhand.MODID); - public BackhandPacketHandler() { - map.put(OffhandSyncItemPacket.packetName, new OffhandSyncItemPacket()); - map.put(OffhandSwapPacket.packetName, new OffhandSwapPacket()); - map.put(OffhandSwapClientPacket.packetName, new OffhandSwapClientPacket()); - map.put(OffhandSyncOffhandUse.packetName, new OffhandSyncOffhandUse()); + public static void init() { + NETWORK.registerMessage(OffhandSyncItemPacket.Handler.class, OffhandSyncItemPacket.class, 0, Side.CLIENT); + NETWORK.registerMessage(OffhandSyncOffhandUse.Handler.class, OffhandSyncOffhandUse.class, 1, Side.CLIENT); } - public void register() { - FMLEventChannel eventChannel; - for (String channel : map.keySet()) { - eventChannel = NetworkRegistry.INSTANCE.newEventDrivenChannel(channel); - eventChannel.register(this); - channels.put(channel, eventChannel); + public static void sendPacketToPlayer(IMessage packet, EntityPlayer player) { + if (player instanceof EntityPlayerMP playerMP) { + NETWORK.sendTo(packet, playerMP); } } - @SubscribeEvent - public void onServerPacket(FMLNetworkEvent.ServerCustomPacketEvent event) { - map.get(event.packet.channel()) - .process(event.packet.payload(), ((NetHandlerPlayServer) event.handler).playerEntity); - } - - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void onClientPacket(FMLNetworkEvent.ClientCustomPacketEvent event) { - map.get(event.packet.channel()) - .process(event.packet.payload(), Minecraft.getMinecraft().thePlayer); - } + public static void sendPacketToAllTracking(Entity entity, IMessage packet) { + if (!(entity.worldObj instanceof WorldServer world) || !BackhandUtils.isValidPlayer(entity)) return; + Set trackingPlayer = world.getEntityTracker() + .getTrackingPlayers(entity); - public void sendPacketToPlayer(FMLProxyPacket packet, EntityPlayerMP player) { - if (FMLCommonHandler.instance() - .getEffectiveSide() == Side.SERVER) { - channels.get(packet.channel()) - .sendTo(packet, player); + for (EntityPlayer player : trackingPlayer) { + if (BackhandUtils.isValidPlayer(player)) { + sendPacketToPlayer(packet, player); + } } } - - public void sendPacketToServer(FMLProxyPacket packet) { - packet.setTarget(Side.SERVER); - channels.get(packet.channel()) - .sendToServer(packet); - } - - public void sendPacketAround(Entity entity, double range, FMLProxyPacket packet) { - if (FMLCommonHandler.instance() - .getEffectiveSide() == Side.SERVER) { - channels.get(packet.channel()) - .sendToAllAround( - packet, - new NetworkRegistry.TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, range)); - } - } - - public void sendPacketToAll(FMLProxyPacket packet) { - if (FMLCommonHandler.instance() - .getEffectiveSide() == Side.SERVER) { - channels.get(packet.channel()) - .sendToAll(packet); - } - } - - public void sendPacketToAllTracking(Entity entity, FMLProxyPacket packet) { - if (!(entity.worldObj instanceof WorldServer world)) return; - world.getEntityTracker() - .func_151247_a(entity, packet); - } } diff --git a/src/main/java/xonin/backhand/packet/OffhandSwapClientPacket.java b/src/main/java/xonin/backhand/packet/OffhandSwapClientPacket.java deleted file mode 100644 index 04cb8eb..0000000 --- a/src/main/java/xonin/backhand/packet/OffhandSwapClientPacket.java +++ /dev/null @@ -1,52 +0,0 @@ - -package xonin.backhand.packet; - -import net.minecraft.entity.player.EntityPlayer; - -import cpw.mods.fml.common.network.ByteBufUtils; -import io.netty.buffer.ByteBuf; -import xonin.backhand.api.core.BackhandUtils; -import xonin.backhand.api.core.IOffhandInventory; -import xonin.backhand.client.ClientEventHandler; - -/** - * User: nerd-boy - * Date: 26/06/13 - * Time: 1:40 PM - */ -public final class OffhandSwapClientPacket extends AbstractPacket { - - public static final String packetName = "MB2|SwapClient"; - private String user; - private EntityPlayer player; - - public OffhandSwapClientPacket() {} - - public OffhandSwapClientPacket(EntityPlayer player) { - this.player = player; - this.user = player.getCommandSenderName(); - } - - @Override - public void process(ByteBuf inputStream, EntityPlayer player) { - this.user = ByteBufUtils.readUTF8String(inputStream); - this.player = player.worldObj.getPlayerEntityByName(user); - if (this.player != null) { - int slot = inputStream.readInt(); - if (IOffhandInventory.isValidSwitch(slot, this.player)) this.player.inventory.currentItem = slot; - BackhandUtils.swapOffhandItem(player); - } - ClientEventHandler.allowSwap = true; - } - - @Override - public String getChannel() { - return packetName; - } - - @Override - public void write(ByteBuf out) { - ByteBufUtils.writeUTF8String(out, user); - out.writeInt(player.inventory.currentItem); - } -} diff --git a/src/main/java/xonin/backhand/packet/OffhandSwapPacket.java b/src/main/java/xonin/backhand/packet/OffhandSwapPacket.java deleted file mode 100644 index acaba55..0000000 --- a/src/main/java/xonin/backhand/packet/OffhandSwapPacket.java +++ /dev/null @@ -1,51 +0,0 @@ -package xonin.backhand.packet; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; - -import cpw.mods.fml.common.network.ByteBufUtils; -import io.netty.buffer.ByteBuf; -import xonin.backhand.Backhand; -import xonin.backhand.api.core.BackhandUtils; - -public class OffhandSwapPacket extends AbstractPacket { - - public static final String packetName = "MB2|Swap"; - - private String user; - EntityPlayer player; - - public OffhandSwapPacket(EntityPlayer player) { - this.player = player; - this.user = player.getCommandSenderName(); - } - - public OffhandSwapPacket() {} - - @Override - public String getChannel() { - return packetName; - } - - @Override - public void write(ByteBuf out) { - ByteBufUtils.writeUTF8String(out, player.getCommandSenderName()); - } - - @Override - public void process(ByteBuf inputStream, EntityPlayer player) { - this.user = ByteBufUtils.readUTF8String(inputStream); - this.player = player.worldObj.getPlayerEntityByName(user); - if (this.player != null) { - ItemStack offhandItem = BackhandUtils.getOffhandItem(this.player); - if (Backhand.isOffhandBlacklisted(player.getCurrentEquippedItem()) - || Backhand.isOffhandBlacklisted(offhandItem)) return; - - BackhandUtils.setPlayerOffhandItem(this.player, this.player.getCurrentEquippedItem()); - player.setCurrentItemOrArmor(0, offhandItem); - Backhand.packetHandler - .sendPacketToPlayer(new OffhandSwapClientPacket(this.player).generatePacket(), (EntityPlayerMP) player); - } - } -} diff --git a/src/main/java/xonin/backhand/packet/OffhandSyncItemPacket.java b/src/main/java/xonin/backhand/packet/OffhandSyncItemPacket.java index 492386b..d0ebc22 100644 --- a/src/main/java/xonin/backhand/packet/OffhandSyncItemPacket.java +++ b/src/main/java/xonin/backhand/packet/OffhandSyncItemPacket.java @@ -1,10 +1,14 @@ package xonin.backhand.packet; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; import xonin.backhand.api.core.BackhandUtils; @@ -13,54 +17,40 @@ * Date: 26/06/13 * Time: 1:40 PM */ -public final class OffhandSyncItemPacket extends AbstractPacket { +public final class OffhandSyncItemPacket implements IMessage { - public static final String packetName = "MB2|SyncItem"; - private String user; - private InventoryPlayer inventory; - private EntityPlayer player; + private int entityId; + private ItemStack stack; public OffhandSyncItemPacket(EntityPlayer player) { - this(player.getCommandSenderName(), player.inventory, player); - } - - public OffhandSyncItemPacket(String user, InventoryPlayer inventory, EntityPlayer player) { - this.user = user; - this.inventory = inventory; - this.player = player; + this.entityId = player.getEntityId(); + this.stack = BackhandUtils.getOffhandItem(player); } + @SuppressWarnings("unused") public OffhandSyncItemPacket() {} @Override - public void process(ByteBuf inputStream, EntityPlayer player) { - this.user = ByteBufUtils.readUTF8String(inputStream); - this.player = player.worldObj.getPlayerEntityByName(user); - if (this.player != null) { - ItemStack offhandItem = ByteBufUtils.readItemStack(inputStream); - BackhandUtils.setPlayerOffhandItem(this.player, offhandItem); - if (!player.worldObj.isRemote) {// Using data sent only by client - try { - ItemStack itemInUse = ByteBufUtils.readItemStack(inputStream); - int itemUseCount = inputStream.readInt(); - this.player.setItemInUse(itemInUse, itemUseCount); - } catch (Exception ignored) {} - } - } + public void fromBytes(ByteBuf buf) { + this.entityId = buf.readInt(); + this.stack = ByteBufUtils.readItemStack(buf); } @Override - public String getChannel() { - return packetName; + public void toBytes(ByteBuf buf) { + buf.writeInt(entityId); + ByteBufUtils.writeItemStack(buf, stack); } - @Override - public void write(ByteBuf out) { - ByteBufUtils.writeUTF8String(out, user); - ByteBufUtils.writeItemStack(out, BackhandUtils.getOffhandItem(player)); - if (player.worldObj.isRemote) {// client-side only thing - ByteBufUtils.writeItemStack(out, player.getItemInUse()); - out.writeInt(player.getItemInUseCount()); + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(OffhandSyncItemPacket message, MessageContext ctx) { + Entity entity = Minecraft.getMinecraft().theWorld.getEntityByID(message.entityId); + if (entity instanceof EntityPlayer player) { + BackhandUtils.setPlayerOffhandItem(player, message.stack); + } + return null; } } } diff --git a/src/main/java/xonin/backhand/packet/OffhandSyncOffhandUse.java b/src/main/java/xonin/backhand/packet/OffhandSyncOffhandUse.java index 37c1734..1bdadc3 100644 --- a/src/main/java/xonin/backhand/packet/OffhandSyncOffhandUse.java +++ b/src/main/java/xonin/backhand/packet/OffhandSyncOffhandUse.java @@ -1,39 +1,49 @@ package xonin.backhand.packet; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; import xonin.backhand.api.core.IBackhandPlayer; -public final class OffhandSyncOffhandUse extends AbstractPacket { +public final class OffhandSyncOffhandUse implements IMessage { - public static final String packetName = "SyncItemUsage"; + private int entityId; private boolean isUsingOffhand; - private EntityPlayer player; public OffhandSyncOffhandUse(EntityPlayer player, boolean isUsingOffhand) { - this.player = player; + this.entityId = player.getEntityId(); this.isUsingOffhand = isUsingOffhand; } + @SuppressWarnings("unused") public OffhandSyncOffhandUse() {} @Override - public void process(ByteBuf inputStream, EntityPlayer player) { - this.player = player.worldObj.getPlayerEntityByName(ByteBufUtils.readUTF8String(inputStream)); - if (this.player == null) return; - ((IBackhandPlayer) this.player).setOffhandItemInUse(inputStream.readBoolean()); + public void fromBytes(ByteBuf buf) { + this.entityId = buf.readInt(); + this.isUsingOffhand = buf.readBoolean(); } @Override - public String getChannel() { - return packetName; + public void toBytes(ByteBuf buf) { + buf.writeInt(entityId); + buf.writeBoolean(isUsingOffhand); } - @Override - public void write(ByteBuf out) { - ByteBufUtils.writeUTF8String(out, player.getCommandSenderName()); - out.writeBoolean(isUsingOffhand); + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(OffhandSyncOffhandUse message, MessageContext ctx) { + Entity entity = Minecraft.getMinecraft().theWorld.getEntityByID(message.entityId); + if (entity instanceof EntityPlayer player) { + ((IBackhandPlayer) player).setOffhandItemInUse(message.isUsingOffhand); + } + return null; + } } } diff --git a/src/main/resources/assets/backhand/lang/en_US.lang b/src/main/resources/assets/backhand/lang/en_US.lang index 137ffe8..d3791e5 100644 --- a/src/main/resources/assets/backhand/lang/en_US.lang +++ b/src/main/resources/assets/backhand/lang/en_US.lang @@ -1,3 +1,4 @@ backhandconfig.title=Backhand Client Configs backhandconfig.offhandRest=Render empty offhand at rest -backhandconfig.creativeOffhand=Creative offhand slot \ No newline at end of file +backhandconfig.creativeOffhand=Creative offhand slot +backhand.swap_offhand=Swap Offhand From 381541c55ecdfe6a759960fb244f89b28e74a7e8 Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 16:08:04 +0100 Subject: [PATCH 2/7] fix offhand swing for other players --- src/main/java/xonin/backhand/CommonProxy.java | 7 ++----- .../mixins/early/minecraft/MixinEntityLivingBase.java | 1 - .../backhand/mixins/early/minecraft/MixinEntityPlayer.java | 1 - .../mixins/early/minecraft/MixinEntityPlayerClient.java | 4 ---- .../mixins/early/minecraft/MixinNetHandlerPlayClient.java | 7 +++++-- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/java/xonin/backhand/CommonProxy.java b/src/main/java/xonin/backhand/CommonProxy.java index 50953e7..adb40c5 100644 --- a/src/main/java/xonin/backhand/CommonProxy.java +++ b/src/main/java/xonin/backhand/CommonProxy.java @@ -1,12 +1,8 @@ package xonin.backhand; -import javax.annotation.Nullable; - -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.FakePlayer; import com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber; import com.gtnewhorizon.gtnhlib.keybind.SyncedKeybind; @@ -43,7 +39,8 @@ public static void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) { @SubscribeEvent public static void addTracking(net.minecraftforge.event.entity.player.PlayerEvent.StartTracking event) { if (BackhandUtils.isValidPlayer(event.entityPlayer) && BackhandUtils.isValidPlayer(event.target)) { - BackhandPacketHandler.sendPacketToPlayer(new OffhandSyncItemPacket((EntityPlayer) event.target), event.entityPlayer); + BackhandPacketHandler + .sendPacketToPlayer(new OffhandSyncItemPacket((EntityPlayer) event.target), event.entityPlayer); } } diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java index 59eac8c..6d5367b 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityLivingBase.java @@ -14,7 +14,6 @@ import com.llamalad7.mixinextras.sugar.Local; -import xonin.backhand.Backhand; import xonin.backhand.api.core.BackhandUtils; import xonin.backhand.packet.BackhandPacketHandler; import xonin.backhand.packet.OffhandSyncItemPacket; diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java index 3df1f36..638709c 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java @@ -25,7 +25,6 @@ import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import xonin.backhand.Backhand; import xonin.backhand.api.core.BackhandUtils; import xonin.backhand.api.core.IBackhandPlayer; import xonin.backhand.api.core.IOffhandInventory; diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayerClient.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayerClient.java index f1de65f..727fdee 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayerClient.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayerClient.java @@ -2,7 +2,6 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.World; @@ -20,9 +19,6 @@ @Mixin(EntityPlayer.class) public abstract class MixinEntityPlayerClient extends EntityLivingBase implements IBackhandPlayer { - @Shadow - public InventoryPlayer inventory; - @Shadow private ItemStack itemInUse; diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java index 4c8f443..e790bb3 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java @@ -36,10 +36,13 @@ public abstract class MixinNetHandlerPlayClient { @Inject( method = "handleAnimation", - at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/server/S0BPacketAnimation;func_148977_d()I")) + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/network/play/server/S0BPacketAnimation;func_148977_d()I", + ordinal = 0)) private void backhand$handleOffhandSwing(S0BPacketAnimation packetIn, CallbackInfo ci, @Local Entity entity) { if (!(entity instanceof IBackhandPlayer player)) return; - if (packetIn.func_148978_c() == 99) { + if (packetIn.func_148977_d() == 99) { player.swingOffItem(); } } From 675ebceddec28c758ade8ceca68abdfc6ff7fad9 Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 16:13:27 +0100 Subject: [PATCH 3/7] this shouldn't be instantiated server-side --- .../java/xonin/backhand/compat/TConstructCompat.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/xonin/backhand/compat/TConstructCompat.java b/src/main/java/xonin/backhand/compat/TConstructCompat.java index c4510dd..fd3a497 100644 --- a/src/main/java/xonin/backhand/compat/TConstructCompat.java +++ b/src/main/java/xonin/backhand/compat/TConstructCompat.java @@ -13,8 +13,10 @@ import com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; import tconstruct.library.tools.HarvestTool; import tconstruct.library.weaponry.IWindup; import tconstruct.tools.TinkerToolEvents; @@ -36,8 +38,11 @@ public static boolean register() { if (Mods.TINKERS_CONSTRUCT.isLoaded()) { try { // Gotta hide those NEW instructions from the JVM - crosshairHandler = CrosshairHandler.class.getConstructor() - .newInstance(); + if (FMLCommonHandler.instance() + .getSide() == Side.CLIENT) { + crosshairHandler = CrosshairHandler.class.getConstructor() + .newInstance(); + } // These need to be MethodHandles since the compiler complains about Mobs-Info not being present // otherwise onHurt = MethodHandles.publicLookup() From 76cf0a945dad7970444fa0525f24df4d2335fe2c Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 18:42:24 +0100 Subject: [PATCH 4/7] bump nhlib dep --- src/main/java/xonin/backhand/Backhand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/xonin/backhand/Backhand.java b/src/main/java/xonin/backhand/Backhand.java index 780666a..c3d677c 100644 --- a/src/main/java/xonin/backhand/Backhand.java +++ b/src/main/java/xonin/backhand/Backhand.java @@ -22,7 +22,7 @@ modid = Backhand.MODID, name = "Backhand", version = Tags.VERSION, - dependencies = "required-after:gtnhlib@[0.6.3,)") + dependencies = "required-after:gtnhlib@[0.6.5,)") public class Backhand { public static final String MODID = "backhand"; From b1a587f5b7c065c3c3b3bfec02072a2952b38cb0 Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:28:32 +0100 Subject: [PATCH 5/7] address review --- src/main/java/xonin/backhand/CommonProxy.java | 4 +- .../early/minecraft/MixinEntityPlayer.java | 8 ++-- .../minecraft/MixinNetHandlerPlayClient.java | 19 -------- .../packet/BackhandPacketHandler.java | 1 + .../packet/OffhandAnimationPacket.java | 44 +++++++++++++++++++ 5 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java diff --git a/src/main/java/xonin/backhand/CommonProxy.java b/src/main/java/xonin/backhand/CommonProxy.java index adb40c5..09acc6e 100644 --- a/src/main/java/xonin/backhand/CommonProxy.java +++ b/src/main/java/xonin/backhand/CommonProxy.java @@ -4,6 +4,8 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import org.lwjgl.input.Keyboard; + import com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber; import com.gtnewhorizon.gtnhlib.keybind.SyncedKeybind; @@ -17,7 +19,7 @@ public class CommonProxy { public static final SyncedKeybind SWAP_KEY = SyncedKeybind - .createConfigurable("backhand.swap_offhand", "key.categories.gameplay", 33) + .createConfigurable("backhand.swap_offhand", "key.categories.gameplay", Keyboard.KEY_F) .registerGlobalListener(CommonProxy::swapOffhand); public void load() {} diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java index 638709c..7b47416 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinEntityPlayer.java @@ -8,10 +8,8 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; -import net.minecraft.network.play.server.S0BPacketAnimation; import net.minecraft.util.RegistrySimple; import net.minecraft.world.World; -import net.minecraft.world.WorldServer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -29,6 +27,7 @@ import xonin.backhand.api.core.IBackhandPlayer; import xonin.backhand.api.core.IOffhandInventory; import xonin.backhand.packet.BackhandPacketHandler; +import xonin.backhand.packet.OffhandAnimationPacket; import xonin.backhand.packet.OffhandSyncOffhandUse; @Mixin(EntityPlayer.class) @@ -171,9 +170,8 @@ public void swingOffItem() { this.backhand$offHandSwingProgressInt = -1; this.backhand$isOffHandSwingInProgress = true; - if (worldObj instanceof WorldServer world) { - world.getEntityTracker() - .func_151247_a(this, new S0BPacketAnimation(this, 99)); + if (!worldObj.isRemote) { + BackhandPacketHandler.sendPacketToAllTracking(player, new OffhandAnimationPacket(player)); } } } diff --git a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java index e790bb3..bf9b539 100644 --- a/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java +++ b/src/main/java/xonin/backhand/mixins/early/minecraft/MixinNetHandlerPlayClient.java @@ -2,19 +2,13 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.network.NetHandlerPlayClient; -import net.minecraft.entity.Entity; -import net.minecraft.network.play.server.S0BPacketAnimation; 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; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.sugar.Local; -import xonin.backhand.api.core.IBackhandPlayer; import xonin.backhand.api.core.IOffhandInventory; @Mixin(NetHandlerPlayClient.class) @@ -33,17 +27,4 @@ public abstract class MixinNetHandlerPlayClient { // return a valid int e.g. between 0 and < 9 return IOffhandInventory.isValidSwitch(original, gameController.thePlayer) ? 0 : -1; } - - @Inject( - method = "handleAnimation", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/network/play/server/S0BPacketAnimation;func_148977_d()I", - ordinal = 0)) - private void backhand$handleOffhandSwing(S0BPacketAnimation packetIn, CallbackInfo ci, @Local Entity entity) { - if (!(entity instanceof IBackhandPlayer player)) return; - if (packetIn.func_148977_d() == 99) { - player.swingOffItem(); - } - } } diff --git a/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java b/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java index 15afeba..d8fc7d3 100644 --- a/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java +++ b/src/main/java/xonin/backhand/packet/BackhandPacketHandler.java @@ -21,6 +21,7 @@ public final class BackhandPacketHandler { public static void init() { NETWORK.registerMessage(OffhandSyncItemPacket.Handler.class, OffhandSyncItemPacket.class, 0, Side.CLIENT); NETWORK.registerMessage(OffhandSyncOffhandUse.Handler.class, OffhandSyncOffhandUse.class, 1, Side.CLIENT); + NETWORK.registerMessage(OffhandAnimationPacket.Handler.class, OffhandAnimationPacket.class, 2, Side.CLIENT); } public static void sendPacketToPlayer(IMessage packet, EntityPlayer player) { diff --git a/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java b/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java new file mode 100644 index 0000000..c0870d1 --- /dev/null +++ b/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java @@ -0,0 +1,44 @@ +package xonin.backhand.packet; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import xonin.backhand.api.core.IBackhandPlayer; + +public class OffhandAnimationPacket implements IMessage { + + private int entityId; + + public OffhandAnimationPacket() {} + + public OffhandAnimationPacket(EntityPlayer player) { + this.entityId = player.getEntityId(); + } + + @Override + public void fromBytes(ByteBuf buf) { + buf.writeInt(entityId); + } + + @Override + public void toBytes(ByteBuf buf) { + entityId = buf.readInt(); + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(OffhandAnimationPacket message, MessageContext ctx) { + Entity entity = Minecraft.getMinecraft().theWorld.getEntityByID(message.entityId); + if (entity instanceof IBackhandPlayer player) { + player.swingOffItem(); + } + return null; + } + } +} From aae001f1dfa5fba9214c9fe2358ae373c7bc6d78 Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:29:01 +0100 Subject: [PATCH 6/7] hit TiC render event with a @SideOnly --- src/main/java/xonin/backhand/compat/TConstructCompat.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/xonin/backhand/compat/TConstructCompat.java b/src/main/java/xonin/backhand/compat/TConstructCompat.java index fd3a497..5b5eb8d 100644 --- a/src/main/java/xonin/backhand/compat/TConstructCompat.java +++ b/src/main/java/xonin/backhand/compat/TConstructCompat.java @@ -17,6 +17,7 @@ import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import tconstruct.library.tools.HarvestTool; import tconstruct.library.weaponry.IWindup; import tconstruct.tools.TinkerToolEvents; @@ -96,6 +97,7 @@ public static void onAttack(LivingAttackEvent event) { } } + @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOWEST) public static void onRenderOverlay(RenderGameOverlayEvent.Pre event) { if (event.type != RenderGameOverlayEvent.ElementType.CROSSHAIRS) return; From c03dd1af1531113c7957e0560210d82090e0f997 Mon Sep 17 00:00:00 2001 From: Lyfts <127234178+Lyfts@users.noreply.github.com> Date: Sun, 26 Jan 2025 22:25:10 +0100 Subject: [PATCH 7/7] whoops those are swapped --- .../java/xonin/backhand/packet/OffhandAnimationPacket.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java b/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java index c0870d1..f5e8b9c 100644 --- a/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java +++ b/src/main/java/xonin/backhand/packet/OffhandAnimationPacket.java @@ -22,12 +22,12 @@ public OffhandAnimationPacket(EntityPlayer player) { @Override public void fromBytes(ByteBuf buf) { - buf.writeInt(entityId); + entityId = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { - entityId = buf.readInt(); + buf.writeInt(entityId); } public static class Handler implements IMessageHandler {