From b2c1dd2d4e3d8af657c8d2a1547d9b26c19792c0 Mon Sep 17 00:00:00 2001 From: Boy Date: Thu, 1 May 2025 11:47:44 +0200 Subject: [PATCH] refactor: use fake entities instead of reflection for packets where possible --- .../nms/v1_20_R3/NMSPackets.java | 98 ++++++------------- .../nms/v1_20_R4/NMSPackets.java | 97 ++++++------------ .../nms/v1_21_R1/NMSPackets.java | 97 ++++++------------ .../nms/v1_21_R2/NMSPackets.java | 69 +++++-------- .../nms/v1_21_R3/NMSPackets.java | 69 +++++-------- .../nms/v1_21_R4/NMSPackets.java | 69 +++++-------- 6 files changed, 154 insertions(+), 345 deletions(-) diff --git a/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSPackets.java b/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSPackets.java index 290f4bc..7eeaf33 100644 --- a/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSPackets.java +++ b/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSPackets.java @@ -9,8 +9,12 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.*; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.PlayerTeam; @@ -37,10 +41,6 @@ import java.util.*; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { static Constructor passengerConstructor; - static Constructor linkConstructor; - static Constructor teleportConstructor; - static Constructor cameraConstructor; - static Constructor rotateHeadConstructor; static { try { passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); @@ -48,30 +48,6 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. } catch (Exception e) { e.printStackTrace(); } - try { - linkConstructor = ClientboundSetEntityLinkPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - linkConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - teleportConstructor = ClientboundTeleportEntityPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - teleportConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - cameraConstructor = ClientboundSetCameraPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - cameraConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - rotateHeadConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - rotateHeadConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } } @Override @@ -85,16 +61,13 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendRotateHeadPacket(int entityId, Location location, List sendTo) { + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity.setId(entityId); byte headRot = (byte) (location.getYaw() * 256.0F / 360.0F); - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeByte(headRot); - try { - ClientboundRotateHeadPacket packet = rotateHeadConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + + ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(entity, headRot); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -212,15 +185,15 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendLeashPacket(int leashEntity, int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeInt(leashEntity); - byteBuf.writeInt(entityId); - try { - ClientboundSetEntityLinkPacket packet = linkConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entities just to avoid reflection + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity1 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + Entity entity2 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity1.setId(leashEntity); + entity2.setId(entityId); + + ClientboundSetEntityLinkPacket packet = new ClientboundSetEntityLinkPacket(entity1, entity2); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -234,33 +207,22 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. boolean onGround, List sendTo ) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeDouble(x); - byteBuf.writeDouble(y); - byteBuf.writeDouble(z); - byteBuf.writeByte((byte) (yaw * 256.0F / 360.0F)); - byteBuf.writeByte((byte) (pitch * 256.0F / 360.0F)); - byteBuf.writeBoolean(onGround); + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(level, x, y, z); + entity.setId(entityId); + entity.setRot((yaw * 256.0F / 360.0F), (pitch * 256.0F / 360.0F)); + entity.setOnGround(onGround); - try { - ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + ClientboundTeleportEntityPacket packet = new ClientboundTeleportEntityPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } @Override public void sendCameraPacket(int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - try { - ClientboundSetCameraPacket packet = cameraConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entity just to avoid reflection + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, MinecraftServer.getServer().overworld()); + ClientboundSetCameraPacket packet = new ClientboundSetCameraPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } diff --git a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java index 4a13cb3..d33ca7b 100644 --- a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java +++ b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSPackets.java @@ -17,8 +17,11 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.PlayerTeam; @@ -48,10 +51,6 @@ import java.util.*; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { static Constructor passengerConstructor; - static Constructor linkConstructor; - static Constructor teleportConstructor; - static Constructor cameraConstructor; - static Constructor rotateHeadConstructor; static { try { passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); @@ -59,30 +58,6 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. } catch (Exception e) { e.printStackTrace(); } - try { - linkConstructor = ClientboundSetEntityLinkPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - linkConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - teleportConstructor = ClientboundTeleportEntityPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - teleportConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - cameraConstructor = ClientboundSetCameraPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - cameraConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - rotateHeadConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - rotateHeadConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } } @Override @@ -96,16 +71,13 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendRotateHeadPacket(int entityId, Location location, List sendTo) { + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity.setId(entityId); byte headRot = (byte) (location.getYaw() * 256.0F / 360.0F); - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeByte(headRot); - try { - ClientboundRotateHeadPacket packet = rotateHeadConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + + ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(entity, headRot); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -222,15 +194,15 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendLeashPacket(int leashEntity, int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeInt(leashEntity); - byteBuf.writeInt(entityId); - try { - ClientboundSetEntityLinkPacket packet = linkConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entities just to avoid reflection + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity1 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + Entity entity2 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity1.setId(leashEntity); + entity2.setId(entityId); + + ClientboundSetEntityLinkPacket packet = new ClientboundSetEntityLinkPacket(entity1, entity2); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -244,33 +216,22 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. boolean onGround, List sendTo ) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeDouble(x); - byteBuf.writeDouble(y); - byteBuf.writeDouble(z); - byteBuf.writeByte((byte) (yaw * 256.0F / 360.0F)); - byteBuf.writeByte((byte) (pitch * 256.0F / 360.0F)); - byteBuf.writeBoolean(onGround); + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(level, x, y, z); + entity.setId(entityId); + entity.setRot((yaw * 256.0F / 360.0F), (pitch * 256.0F / 360.0F)); + entity.setOnGround(onGround); - try { - ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + ClientboundTeleportEntityPacket packet = new ClientboundTeleportEntityPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } @Override public void sendCameraPacket(int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - try { - ClientboundSetCameraPacket packet = cameraConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entity just to avoid reflection + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, MinecraftServer.getServer().overworld()); + ClientboundSetCameraPacket packet = new ClientboundSetCameraPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } diff --git a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java index a820566..8f58be9 100644 --- a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java +++ b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSPackets.java @@ -18,8 +18,11 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.PlayerTeam; @@ -48,10 +51,6 @@ import java.util.*; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { static Constructor passengerConstructor; - static Constructor linkConstructor; - static Constructor teleportConstructor; - static Constructor cameraConstructor; - static Constructor rotateHeadConstructor; static Constructor rotationConstructor; static Constructor spawnConstructor; @@ -62,30 +61,6 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. } catch (Exception e) { e.printStackTrace(); } - try { - linkConstructor = ClientboundSetEntityLinkPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - linkConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - teleportConstructor = ClientboundTeleportEntityPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - teleportConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - cameraConstructor = ClientboundSetCameraPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - cameraConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - rotateHeadConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - rotateHeadConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } try { rotationConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); rotationConstructor.setAccessible(true); @@ -105,16 +80,13 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendRotateHeadPacket(int entityId, Location location, List sendTo) { + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity.setId(entityId); byte headRot = (byte) (location.getYaw() * 256.0F / 360.0F); - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeByte(headRot); - try { - ClientboundRotateHeadPacket packet = rotateHeadConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + + ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(entity, headRot); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -231,15 +203,15 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendLeashPacket(int leashEntity, int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeInt(leashEntity); - byteBuf.writeInt(entityId); - try { - ClientboundSetEntityLinkPacket packet = linkConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entities just to avoid reflection + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity1 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + Entity entity2 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity1.setId(leashEntity); + entity2.setId(entityId); + + ClientboundSetEntityLinkPacket packet = new ClientboundSetEntityLinkPacket(entity1, entity2); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -253,33 +225,22 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. boolean onGround, List sendTo ) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeDouble(x); - byteBuf.writeDouble(y); - byteBuf.writeDouble(z); - byteBuf.writeByte((byte) (yaw * 256.0F / 360.0F)); - byteBuf.writeByte((byte) (pitch * 256.0F / 360.0F)); - byteBuf.writeBoolean(onGround); + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(level, x, y, z); + entity.setId(entityId); + entity.setRot((yaw * 256.0F / 360.0F), (pitch * 256.0F / 360.0F)); + entity.setOnGround(onGround); - try { - ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + ClientboundTeleportEntityPacket packet = new ClientboundTeleportEntityPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } @Override public void sendCameraPacket(int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - try { - ClientboundSetCameraPacket packet = cameraConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entity just to avoid reflection + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, MinecraftServer.getServer().overworld()); + ClientboundSetCameraPacket packet = new ClientboundSetCameraPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } @Override diff --git a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java index daea761..b3d2cef 100644 --- a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java +++ b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSPackets.java @@ -17,9 +17,12 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.PositionMoveRotation; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.level.portal.TeleportTransition; import net.minecraft.world.phys.Vec3; @@ -51,9 +54,6 @@ import java.util.*; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { static Constructor passengerConstructor; - static Constructor linkConstructor; - static Constructor cameraConstructor; - static Constructor rotateHeadConstructor; static { try { passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); @@ -61,24 +61,6 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. } catch (Exception e) { e.printStackTrace(); } - try { - linkConstructor = ClientboundSetEntityLinkPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - linkConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - cameraConstructor = ClientboundSetCameraPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - cameraConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - rotateHeadConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - rotateHeadConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } } @Override @@ -92,16 +74,13 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendRotateHeadPacket(int entityId, Location location, List sendTo) { + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity.setId(entityId); byte headRot = (byte) (location.getYaw() * 256.0F / 360.0F); - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeByte(headRot); - try { - ClientboundRotateHeadPacket packet = rotateHeadConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + + ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(entity, headRot); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -219,15 +198,15 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendLeashPacket(int leashEntity, int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeInt(leashEntity); - byteBuf.writeInt(entityId); - try { - ClientboundSetEntityLinkPacket packet = linkConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entities just to avoid reflection + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity1 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + Entity entity2 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity1.setId(leashEntity); + entity2.setId(entityId); + + ClientboundSetEntityLinkPacket packet = new ClientboundSetEntityLinkPacket(entity1, entity2); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -251,14 +230,10 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendCameraPacket(int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - try { - ClientboundSetCameraPacket packet = cameraConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entity just to avoid reflection + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, MinecraftServer.getServer().overworld()); + ClientboundSetCameraPacket packet = new ClientboundSetCameraPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } diff --git a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java index 44ee3f9..ae6b42e 100644 --- a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java +++ b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSPackets.java @@ -18,9 +18,12 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.PositionMoveRotation; +import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.level.portal.TeleportTransition; import net.minecraft.world.phys.Vec3; @@ -54,9 +57,6 @@ import java.util.*; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { static Constructor passengerConstructor; - static Constructor linkConstructor; - static Constructor cameraConstructor; - static Constructor rotateHeadConstructor; static { try { @@ -65,24 +65,6 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. } catch (Exception e) { e.printStackTrace(); } - try { - linkConstructor = ClientboundSetEntityLinkPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - linkConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - cameraConstructor = ClientboundSetCameraPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - cameraConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - rotateHeadConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - rotateHeadConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } } @Override @@ -96,16 +78,13 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendRotateHeadPacket(int entityId, Location location, List sendTo) { + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity.setId(entityId); byte headRot = (byte) (location.getYaw() * 256.0F / 360.0F); - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeByte(headRot); - try { - ClientboundRotateHeadPacket packet = rotateHeadConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + + ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(entity, headRot); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -223,15 +202,15 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendLeashPacket(int leashEntity, int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeInt(leashEntity); - byteBuf.writeInt(entityId); - try { - ClientboundSetEntityLinkPacket packet = linkConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entities just to avoid reflection + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity1 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + Entity entity2 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity1.setId(leashEntity); + entity2.setId(entityId); + + ClientboundSetEntityLinkPacket packet = new ClientboundSetEntityLinkPacket(entity1, entity2); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -255,14 +234,10 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendCameraPacket(int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - try { - ClientboundSetCameraPacket packet = cameraConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entity just to avoid reflection + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, MinecraftServer.getServer().overworld()); + ClientboundSetCameraPacket packet = new ClientboundSetCameraPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); } diff --git a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java index c3c4553..a9df95d 100644 --- a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java +++ b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSPackets.java @@ -20,6 +20,7 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; @@ -57,9 +58,6 @@ import java.util.*; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { static Constructor passengerConstructor; - static Constructor linkConstructor; - static Constructor cameraConstructor; - static Constructor rotateHeadConstructor; static { try { @@ -68,24 +66,6 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. } catch (Exception e) { e.printStackTrace(); } - try { - linkConstructor = ClientboundSetEntityLinkPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - linkConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - cameraConstructor = ClientboundSetCameraPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - cameraConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } - try { - rotateHeadConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); - rotateHeadConstructor.setAccessible(true); - } catch (Exception e) { - e.printStackTrace(); - } } @Override @@ -99,16 +79,13 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendRotateHeadPacket(int entityId, Location location, List sendTo) { + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity.setId(entityId); byte headRot = (byte) (location.getYaw() * 256.0F / 360.0F); - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - byteBuf.writeByte(headRot); - try { - ClientboundRotateHeadPacket packet = rotateHeadConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + + ClientboundRotateHeadPacket packet = new ClientboundRotateHeadPacket(entity, headRot); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -226,15 +203,15 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendLeashPacket(int leashEntity, int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeInt(leashEntity); - byteBuf.writeInt(entityId); - try { - ClientboundSetEntityLinkPacket packet = linkConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entities just to avoid reflection + ServerLevel level = MinecraftServer.getServer().overworld(); + Entity entity1 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + Entity entity2 = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level); + entity1.setId(leashEntity); + entity2.setId(entityId); + + ClientboundSetEntityLinkPacket packet = new ClientboundSetEntityLinkPacket(entity1, entity2); + for (Player p : sendTo) sendPacket(p, packet); } @Override @@ -258,14 +235,12 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. @Override public void sendCameraPacket(int entityId, List sendTo) { - FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); - byteBuf.writeVarInt(entityId); - try { - ClientboundSetCameraPacket packet = cameraConstructor.newInstance(byteBuf); - for (Player p : sendTo) sendPacket(p, packet); - } catch (Exception e) { - e.printStackTrace(); - } + // Fake entity just to avoid reflection + Entity entity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, MinecraftServer.getServer().overworld()); + entity.setId(entityId); + + ClientboundSetCameraPacket packet = new ClientboundSetCameraPacket(entity); + for (Player p : sendTo) sendPacket(p, packet); }