From 1a794fa1ea8e8fcf94d7f7e4492086fc5088234c Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Sat, 30 Nov 2024 14:32:40 -0600 Subject: [PATCH] feat: move more packets to NMS --- .../hibiscuscommons/nms/NMSPackets.java | 17 +++ .../util/packets/PacketManager.java | 25 +++- .../nms/v1_20_R1/NMSPackets.java | 117 +++++++++++++++- .../nms/v1_20_R2/NMSPackets.java | 117 +++++++++++++++- .../nms/v1_20_R3/NMSPackets.java | 118 +++++++++++++++- .../nms/v1_20_R4/NMSPackets.java | 117 +++++++++++++++- .../nms/v1_21_R1/NMSPackets.java | 127 +++++++++++++++++- .../nms/v1_21_R2/NMSPackets.java | 106 ++++++++++++++- 8 files changed, 716 insertions(+), 28 deletions(-) diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java b/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java index 1741312..63632bc 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSPackets.java @@ -1,5 +1,6 @@ package me.lojosho.hibiscuscommons.nms; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; @@ -32,4 +33,20 @@ public interface NMSPackets { String name ); + void sendMountPacket(int mountId, int[] passengerIds, List sendTo); + + void sendLeashPacket(int leashEntity, int entityId, List sendTo); + + void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ); + + void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo); } diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/util/packets/PacketManager.java b/common/src/main/java/me/lojosho/hibiscuscommons/util/packets/PacketManager.java index c510773..ad20a6e 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/util/packets/PacketManager.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/util/packets/PacketManager.java @@ -57,10 +57,7 @@ public class PacketManager { int passengerId, @NotNull List sendTo ) { - PacketContainer packet = new PacketContainer(PacketType.Play.Server.MOUNT); - packet.getIntegers().write(0, mountId); - packet.getIntegerArrays().write(0, new int[]{passengerId}); - for (Player p : sendTo) sendPacket(p, packet); + NMSHandlers.getHandler().getPacketHandler().sendMountPacket(mountId, new int[]{passengerId}, sendTo); } public static void sendLookPacket( @@ -101,6 +98,9 @@ public class PacketManager { ) { float ROTATION_FACTOR = 256.0F / 360.0F; float yaw2 = yaw * ROTATION_FACTOR; + + NMSHandlers.getHandler().getPacketHandler().sendRotationPacket(entityId, yaw2, onGround, sendTo); + /* PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_LOOK); packet.getIntegers().write(0, entityId); packet.getBytes().write(0, (byte) yaw2); @@ -109,6 +109,8 @@ public class PacketManager { //Bukkit.getLogger().info("DEBUG: Yaw: " + (location.getYaw() * ROTATION_FACTOR) + " | Original Yaw: " + location.getYaw()); packet.getBooleans().write(0, onGround); for (Player p : sendTo) sendPacket(p, packet); + + */ } public static void sendRidingPacket( @@ -124,12 +126,15 @@ public class PacketManager { final int[] passengerIds, final @NotNull List sendTo ) { + NMSHandlers.getHandler().getPacketHandler().sendMountPacket(mountId, passengerIds, sendTo); + /* PacketContainer packet = new PacketContainer(PacketType.Play.Server.MOUNT); packet.getIntegers().write(0, mountId); packet.getIntegerArrays().write(0, passengerIds); for (final Player p : sendTo) { sendPacket(p, packet); } + */ } /** @@ -172,12 +177,15 @@ public class PacketManager { final int entityId, final @NotNull List sendTo ) { + NMSHandlers.getHandler().getPacketHandler().sendLeashPacket(leashedEntity, entityId, sendTo); + /* PacketContainer packet = new PacketContainer(PacketType.Play.Server.ATTACH_ENTITY); packet.getIntegers().write(0, leashedEntity); packet.getIntegers().write(1, entityId); for (final Player p : sendTo) { sendPacket(p, packet); } + */ } /** @@ -193,6 +201,14 @@ public class PacketManager { boolean onGround, final @NotNull List sendTo ) { + double x = location.getX(); + double y = location.getY(); + double z = location.getZ(); + float yaw = location.getYaw(); + float pitch = location.getPitch(); + NMSHandlers.getHandler().getPacketHandler().sendTeleportPacket(entityId, x, y, z, yaw, pitch, onGround, sendTo); + + /* PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT); packet.getIntegers().write(0, entityId); packet.getDoubles().write(0, location.getX()); @@ -204,6 +220,7 @@ public class PacketManager { for (final Player p : sendTo) { sendPacket(p, packet); } + */ } diff --git a/v1_20_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R1/NMSPackets.java b/v1_20_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R1/NMSPackets.java index 25a6294..133eb88 100644 --- a/v1_20_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R1/NMSPackets.java +++ b/v1_20_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R1/NMSPackets.java @@ -1,10 +1,10 @@ package me.lojosho.hibiscuscommons.nms.v1_20_R1; import com.mojang.datafixers.util.Pair; +import io.netty.buffer.Unpooled; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; @@ -18,6 +18,8 @@ import org.bukkit.craftbukkit.v1_20_R1.scoreboard.CraftScoreboard; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -25,6 +27,44 @@ import java.util.List; 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 lookAtConstructor; + static { + try { + passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + passengerConstructor.setAccessible(true); + } 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 { + lookAtConstructor = ClientboundPlayerLookAtPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + lookAtConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void sendEquipmentSlotUpdate( int entityId, @@ -113,4 +153,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. add(name); }}, ClientboundSetPlayerTeamPacket.Action.ADD); sendPacket(player, createPlayerTeamPacket); - }} + } + + @Override + public void sendMountPacket(int mountId, int[] passengerIds, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(mountId); + byteBuf.writeVarIntArray(passengerIds); + try { + ClientboundSetPassengersPacket packet = passengerConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @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(); + } + } + + @Override + public void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(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); + + try { + ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(entityId); + byteBuf.writeFloat(yaw); + byteBuf.writeBoolean(onGround); + try { + ClientboundPlayerLookAtPacket packet = lookAtConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/v1_20_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R2/NMSPackets.java b/v1_20_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R2/NMSPackets.java index 290ceaf..2d5d072 100644 --- a/v1_20_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R2/NMSPackets.java +++ b/v1_20_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R2/NMSPackets.java @@ -1,10 +1,10 @@ package me.lojosho.hibiscuscommons.nms.v1_20_R2; import com.mojang.datafixers.util.Pair; +import io.netty.buffer.Unpooled; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; @@ -18,6 +18,8 @@ import org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftScoreboard; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -25,6 +27,44 @@ import java.util.List; 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 lookAtConstructor; + static { + try { + passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + passengerConstructor.setAccessible(true); + } 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 { + lookAtConstructor = ClientboundPlayerLookAtPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + lookAtConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void sendEquipmentSlotUpdate( int entityId, @@ -113,4 +153,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. add(name); }}, ClientboundSetPlayerTeamPacket.Action.ADD); sendPacket(player, createPlayerTeamPacket); - }} + } + + @Override + public void sendMountPacket(int mountId, int[] passengerIds, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(mountId); + byteBuf.writeVarIntArray(passengerIds); + try { + ClientboundSetPassengersPacket packet = passengerConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @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(); + } + } + + @Override + public void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(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); + + try { + ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(entityId); + byteBuf.writeFloat(yaw); + byteBuf.writeBoolean(onGround); + try { + ClientboundPlayerLookAtPacket packet = lookAtConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +} 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 1bbad89..d0e2982 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 @@ -1,10 +1,10 @@ package me.lojosho.hibiscuscommons.nms.v1_20_R3; import com.mojang.datafixers.util.Pair; +import io.netty.buffer.Unpooled; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; @@ -18,6 +18,8 @@ import org.bukkit.craftbukkit.v1_20_R3.scoreboard.CraftScoreboard; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -25,6 +27,44 @@ import java.util.List; 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 lookAtConstructor; + static { + try { + passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + passengerConstructor.setAccessible(true); + } 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 { + lookAtConstructor = ClientboundPlayerLookAtPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + lookAtConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void sendEquipmentSlotUpdate( int entityId, @@ -113,4 +153,74 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. add(name); }}, ClientboundSetPlayerTeamPacket.Action.ADD); sendPacket(player, createPlayerTeamPacket); - }} + } + + + @Override + public void sendMountPacket(int mountId, int[] passengerIds, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(mountId); + byteBuf.writeVarIntArray(passengerIds); + try { + ClientboundSetPassengersPacket packet = passengerConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @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(); + } + } + + @Override + public void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(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); + + try { + ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(entityId); + byteBuf.writeFloat(yaw); + byteBuf.writeBoolean(onGround); + try { + ClientboundPlayerLookAtPacket packet = lookAtConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +} 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 9e527e1..6455829 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 @@ -1,10 +1,10 @@ package me.lojosho.hibiscuscommons.nms.v1_20_R4; import com.mojang.datafixers.util.Pair; +import io.netty.buffer.Unpooled; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; @@ -18,6 +18,8 @@ import org.bukkit.craftbukkit.scoreboard.CraftScoreboard; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -25,6 +27,44 @@ import java.util.List; 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 lookAtConstructor; + static { + try { + passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + passengerConstructor.setAccessible(true); + } 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 { + lookAtConstructor = ClientboundPlayerLookAtPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + lookAtConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void sendEquipmentSlotUpdate( int entityId, @@ -113,4 +153,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. add(name); }}, ClientboundSetPlayerTeamPacket.Action.ADD); sendPacket(player, createPlayerTeamPacket); - }} + } + + @Override + public void sendMountPacket(int mountId, int[] passengerIds, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(mountId); + byteBuf.writeVarIntArray(passengerIds); + try { + ClientboundSetPassengersPacket packet = passengerConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @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(); + } + } + + @Override + public void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(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); + + try { + ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(entityId); + byteBuf.writeFloat(yaw); + byteBuf.writeBoolean(onGround); + try { + ClientboundPlayerLookAtPacket packet = lookAtConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +} 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 de0c2e3..1a20ae4 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 @@ -1,10 +1,10 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R1; import com.mojang.datafixers.util.Pair; +import io.netty.buffer.Unpooled; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; @@ -18,6 +18,8 @@ import org.bukkit.craftbukkit.scoreboard.CraftScoreboard; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -25,6 +27,54 @@ import java.util.List; 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 lookAtConstructor; + static Constructor rotationConstructor; + + static { + try { + passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + passengerConstructor.setAccessible(true); + } 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 { + lookAtConstructor = ClientboundPlayerLookAtPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + lookAtConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + try { + rotationConstructor = ClientboundRotateHeadPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + rotationConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override public void sendEquipmentSlotUpdate( int entityId, @@ -113,4 +163,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. add(name); }}, ClientboundSetPlayerTeamPacket.Action.ADD); sendPacket(player, createPlayerTeamPacket); - }} + } + + @Override + public void sendMountPacket(int mountId, int[] passengerIds, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(mountId); + byteBuf.writeVarIntArray(passengerIds); + try { + ClientboundSetPassengersPacket packet = passengerConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @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(); + } + } + + @Override + public void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(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); + + try { + ClientboundTeleportEntityPacket packet = teleportConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(entityId); + byteBuf.writeFloat(yaw); + byteBuf.writeBoolean(onGround); + try { + ClientboundPlayerLookAtPacket packet = lookAtConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +} 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 d4835bc..55a372b 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 @@ -1,13 +1,16 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R2; import com.mojang.datafixers.util.Pair; +import io.netty.buffer.Unpooled; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; -import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; -import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket; +import net.minecraft.network.protocol.game.*; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.PositionMoveRotation; import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.level.portal.TeleportTransition; +import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Team; import org.bukkit.Bukkit; @@ -16,8 +19,11 @@ import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.craftbukkit.scoreboard.CraftScoreboard; import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -25,6 +31,37 @@ import java.util.List; public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { + static Constructor passengerConstructor; + static Constructor linkConstructor; + static Constructor cameraConstructor; + static Constructor lookAtConstructor; + static { + try { + passengerConstructor = ClientboundSetPassengersPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + passengerConstructor.setAccessible(true); + } 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 { + lookAtConstructor = ClientboundPlayerLookAtPacket.class.getDeclaredConstructor(FriendlyByteBuf.class); + lookAtConstructor.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void sendEquipmentSlotUpdate( int entityId, @@ -113,4 +150,65 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. add(name); }}, ClientboundSetPlayerTeamPacket.Action.ADD); sendPacket(player, createPlayerTeamPacket); - }} + } + + + @Override + public void sendMountPacket(int mountId, int[] passengerIds, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(mountId); + byteBuf.writeVarIntArray(passengerIds); + try { + ClientboundSetPassengersPacket packet = passengerConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @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(); + } + } + + @Override + public void sendTeleportPacket( + int entityId, + double x, + double y, + double z, + float yaw, + float pitch, + boolean onGround, + List sendTo + ) { + try { + ClientboundTeleportEntityPacket packet = ClientboundTeleportEntityPacket.teleport(entityId, new PositionMoveRotation(new Vec3(x, y, z), Vec3.ZERO, yaw, pitch), java.util.Set.of(), onGround); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void sendRotationPacket(int entityId, float yaw, boolean onGround, List sendTo) { + FriendlyByteBuf byteBuf = new FriendlyByteBuf(Unpooled.buffer()); + byteBuf.writeInt(entityId); + byteBuf.writeFloat(yaw); + byteBuf.writeBoolean(onGround); + try { + ClientboundPlayerLookAtPacket packet = lookAtConstructor.newInstance(byteBuf); + for (Player p : sendTo) sendPacket(p, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +}