9
0
mirror of https://github.com/HibiscusMC/HibiscusCommons.git synced 2025-12-19 15:09:26 +00:00

feat: move more packets to NMS

This commit is contained in:
LoJoSho
2024-11-30 14:32:40 -06:00
parent ef8dd9adce
commit 1a794fa1ea
8 changed files with 716 additions and 28 deletions

View File

@@ -1,5 +1,6 @@
package me.lojosho.hibiscuscommons.nms; package me.lojosho.hibiscuscommons.nms;
import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -32,4 +33,20 @@ public interface NMSPackets {
String name String name
); );
void sendMountPacket(int mountId, int[] passengerIds, List<Player> sendTo);
void sendLeashPacket(int leashEntity, int entityId, List<Player> sendTo);
void sendTeleportPacket(
int entityId,
double x,
double y,
double z,
float yaw,
float pitch,
boolean onGround,
List<Player> sendTo
);
void sendRotationPacket(int entityId, float yaw, boolean onGround, List<Player> sendTo);
} }

View File

@@ -57,10 +57,7 @@ public class PacketManager {
int passengerId, int passengerId,
@NotNull List<Player> sendTo @NotNull List<Player> sendTo
) { ) {
PacketContainer packet = new PacketContainer(PacketType.Play.Server.MOUNT); NMSHandlers.getHandler().getPacketHandler().sendMountPacket(mountId, new int[]{passengerId}, sendTo);
packet.getIntegers().write(0, mountId);
packet.getIntegerArrays().write(0, new int[]{passengerId});
for (Player p : sendTo) sendPacket(p, packet);
} }
public static void sendLookPacket( public static void sendLookPacket(
@@ -101,6 +98,9 @@ public class PacketManager {
) { ) {
float ROTATION_FACTOR = 256.0F / 360.0F; float ROTATION_FACTOR = 256.0F / 360.0F;
float yaw2 = yaw * ROTATION_FACTOR; float yaw2 = yaw * ROTATION_FACTOR;
NMSHandlers.getHandler().getPacketHandler().sendRotationPacket(entityId, yaw2, onGround, sendTo);
/*
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_LOOK); PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_LOOK);
packet.getIntegers().write(0, entityId); packet.getIntegers().write(0, entityId);
packet.getBytes().write(0, (byte) yaw2); 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()); //Bukkit.getLogger().info("DEBUG: Yaw: " + (location.getYaw() * ROTATION_FACTOR) + " | Original Yaw: " + location.getYaw());
packet.getBooleans().write(0, onGround); packet.getBooleans().write(0, onGround);
for (Player p : sendTo) sendPacket(p, packet); for (Player p : sendTo) sendPacket(p, packet);
*/
} }
public static void sendRidingPacket( public static void sendRidingPacket(
@@ -124,12 +126,15 @@ public class PacketManager {
final int[] passengerIds, final int[] passengerIds,
final @NotNull List<Player> sendTo final @NotNull List<Player> sendTo
) { ) {
NMSHandlers.getHandler().getPacketHandler().sendMountPacket(mountId, passengerIds, sendTo);
/*
PacketContainer packet = new PacketContainer(PacketType.Play.Server.MOUNT); PacketContainer packet = new PacketContainer(PacketType.Play.Server.MOUNT);
packet.getIntegers().write(0, mountId); packet.getIntegers().write(0, mountId);
packet.getIntegerArrays().write(0, passengerIds); packet.getIntegerArrays().write(0, passengerIds);
for (final Player p : sendTo) { for (final Player p : sendTo) {
sendPacket(p, packet); sendPacket(p, packet);
} }
*/
} }
/** /**
@@ -172,12 +177,15 @@ public class PacketManager {
final int entityId, final int entityId,
final @NotNull List<Player> sendTo final @NotNull List<Player> sendTo
) { ) {
NMSHandlers.getHandler().getPacketHandler().sendLeashPacket(leashedEntity, entityId, sendTo);
/*
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ATTACH_ENTITY); PacketContainer packet = new PacketContainer(PacketType.Play.Server.ATTACH_ENTITY);
packet.getIntegers().write(0, leashedEntity); packet.getIntegers().write(0, leashedEntity);
packet.getIntegers().write(1, entityId); packet.getIntegers().write(1, entityId);
for (final Player p : sendTo) { for (final Player p : sendTo) {
sendPacket(p, packet); sendPacket(p, packet);
} }
*/
} }
/** /**
@@ -193,6 +201,14 @@ public class PacketManager {
boolean onGround, boolean onGround,
final @NotNull List<Player> sendTo final @NotNull List<Player> 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); PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT);
packet.getIntegers().write(0, entityId); packet.getIntegers().write(0, entityId);
packet.getDoubles().write(0, location.getX()); packet.getDoubles().write(0, location.getX());
@@ -204,6 +220,7 @@ public class PacketManager {
for (final Player p : sendTo) { for (final Player p : sendTo) {
sendPacket(p, packet); sendPacket(p, packet);
} }
*/
} }

View File

@@ -1,10 +1,10 @@
package me.lojosho.hibiscuscommons.nms.v1_20_R1; package me.lojosho.hibiscuscommons.nms.v1_20_R1;
import com.mojang.datafixers.util.Pair; 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.Packet;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Inventory; 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.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -25,6 +27,44 @@ import java.util.List;
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
static Constructor<ClientboundSetPassengersPacket> passengerConstructor;
static Constructor<ClientboundSetEntityLinkPacket> linkConstructor;
static Constructor<ClientboundTeleportEntityPacket> teleportConstructor;
static Constructor<ClientboundSetCameraPacket> cameraConstructor;
static Constructor<ClientboundPlayerLookAtPacket> 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 @Override
public void sendEquipmentSlotUpdate( public void sendEquipmentSlotUpdate(
int entityId, int entityId,
@@ -113,4 +153,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
add(name); add(name);
}}, ClientboundSetPlayerTeamPacket.Action.ADD); }}, ClientboundSetPlayerTeamPacket.Action.ADD);
sendPacket(player, createPlayerTeamPacket); sendPacket(player, createPlayerTeamPacket);
}} }
@Override
public void sendMountPacket(int mountId, int[] passengerIds, List<Player> 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<Player> 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<Player> 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<Player> 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();
}
}
}

View File

@@ -1,10 +1,10 @@
package me.lojosho.hibiscuscommons.nms.v1_20_R2; package me.lojosho.hibiscuscommons.nms.v1_20_R2;
import com.mojang.datafixers.util.Pair; 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.Packet;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Inventory; 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.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -25,6 +27,44 @@ import java.util.List;
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
static Constructor<ClientboundSetPassengersPacket> passengerConstructor;
static Constructor<ClientboundSetEntityLinkPacket> linkConstructor;
static Constructor<ClientboundTeleportEntityPacket> teleportConstructor;
static Constructor<ClientboundSetCameraPacket> cameraConstructor;
static Constructor<ClientboundPlayerLookAtPacket> 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 @Override
public void sendEquipmentSlotUpdate( public void sendEquipmentSlotUpdate(
int entityId, int entityId,
@@ -113,4 +153,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
add(name); add(name);
}}, ClientboundSetPlayerTeamPacket.Action.ADD); }}, ClientboundSetPlayerTeamPacket.Action.ADD);
sendPacket(player, createPlayerTeamPacket); sendPacket(player, createPlayerTeamPacket);
}} }
@Override
public void sendMountPacket(int mountId, int[] passengerIds, List<Player> 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<Player> 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<Player> 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<Player> 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();
}
}
}

View File

@@ -1,10 +1,10 @@
package me.lojosho.hibiscuscommons.nms.v1_20_R3; package me.lojosho.hibiscuscommons.nms.v1_20_R3;
import com.mojang.datafixers.util.Pair; 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.Packet;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Inventory; 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.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -25,6 +27,44 @@ import java.util.List;
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
static Constructor<ClientboundSetPassengersPacket> passengerConstructor;
static Constructor<ClientboundSetEntityLinkPacket> linkConstructor;
static Constructor<ClientboundTeleportEntityPacket> teleportConstructor;
static Constructor<ClientboundSetCameraPacket> cameraConstructor;
static Constructor<ClientboundPlayerLookAtPacket> 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 @Override
public void sendEquipmentSlotUpdate( public void sendEquipmentSlotUpdate(
int entityId, int entityId,
@@ -113,4 +153,74 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
add(name); add(name);
}}, ClientboundSetPlayerTeamPacket.Action.ADD); }}, ClientboundSetPlayerTeamPacket.Action.ADD);
sendPacket(player, createPlayerTeamPacket); sendPacket(player, createPlayerTeamPacket);
}} }
@Override
public void sendMountPacket(int mountId, int[] passengerIds, List<Player> 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<Player> 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<Player> 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<Player> 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();
}
}
}

View File

@@ -1,10 +1,10 @@
package me.lojosho.hibiscuscommons.nms.v1_20_R4; package me.lojosho.hibiscuscommons.nms.v1_20_R4;
import com.mojang.datafixers.util.Pair; 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.Packet;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Inventory; 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.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -25,6 +27,44 @@ import java.util.List;
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
static Constructor<ClientboundSetPassengersPacket> passengerConstructor;
static Constructor<ClientboundSetEntityLinkPacket> linkConstructor;
static Constructor<ClientboundTeleportEntityPacket> teleportConstructor;
static Constructor<ClientboundSetCameraPacket> cameraConstructor;
static Constructor<ClientboundPlayerLookAtPacket> 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 @Override
public void sendEquipmentSlotUpdate( public void sendEquipmentSlotUpdate(
int entityId, int entityId,
@@ -113,4 +153,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
add(name); add(name);
}}, ClientboundSetPlayerTeamPacket.Action.ADD); }}, ClientboundSetPlayerTeamPacket.Action.ADD);
sendPacket(player, createPlayerTeamPacket); sendPacket(player, createPlayerTeamPacket);
}} }
@Override
public void sendMountPacket(int mountId, int[] passengerIds, List<Player> 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<Player> 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<Player> 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<Player> 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();
}
}
}

View File

@@ -1,10 +1,10 @@
package me.lojosho.hibiscuscommons.nms.v1_21_R1; package me.lojosho.hibiscuscommons.nms.v1_21_R1;
import com.mojang.datafixers.util.Pair; 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.Packet;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Inventory; 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.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -25,6 +27,54 @@ import java.util.List;
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
static Constructor<ClientboundSetPassengersPacket> passengerConstructor;
static Constructor<ClientboundSetEntityLinkPacket> linkConstructor;
static Constructor<ClientboundTeleportEntityPacket> teleportConstructor;
static Constructor<ClientboundSetCameraPacket> cameraConstructor;
static Constructor<ClientboundPlayerLookAtPacket> lookAtConstructor;
static Constructor<ClientboundRotateHeadPacket> 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 @Override
public void sendEquipmentSlotUpdate( public void sendEquipmentSlotUpdate(
int entityId, int entityId,
@@ -113,4 +163,73 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
add(name); add(name);
}}, ClientboundSetPlayerTeamPacket.Action.ADD); }}, ClientboundSetPlayerTeamPacket.Action.ADD);
sendPacket(player, createPlayerTeamPacket); sendPacket(player, createPlayerTeamPacket);
}} }
@Override
public void sendMountPacket(int mountId, int[] passengerIds, List<Player> 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<Player> 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<Player> 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<Player> 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();
}
}
}

View File

@@ -1,13 +1,16 @@
package me.lojosho.hibiscuscommons.nms.v1_21_R2; package me.lojosho.hibiscuscommons.nms.v1_21_R2;
import com.mojang.datafixers.util.Pair; 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.Packet;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.PositionMoveRotation;
import net.minecraft.world.entity.player.Inventory; 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.PlayerTeam;
import net.minecraft.world.scores.Team; import net.minecraft.world.scores.Team;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -16,8 +19,11 @@ import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.scoreboard.CraftScoreboard; import org.bukkit.craftbukkit.scoreboard.CraftScoreboard;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Constructor;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@@ -25,6 +31,37 @@ import java.util.List;
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets { public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
static Constructor<ClientboundSetPassengersPacket> passengerConstructor;
static Constructor<ClientboundSetEntityLinkPacket> linkConstructor;
static Constructor<ClientboundSetCameraPacket> cameraConstructor;
static Constructor<ClientboundPlayerLookAtPacket> 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 @Override
public void sendEquipmentSlotUpdate( public void sendEquipmentSlotUpdate(
int entityId, int entityId,
@@ -113,4 +150,65 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
add(name); add(name);
}}, ClientboundSetPlayerTeamPacket.Action.ADD); }}, ClientboundSetPlayerTeamPacket.Action.ADD);
sendPacket(player, createPlayerTeamPacket); sendPacket(player, createPlayerTeamPacket);
}} }
@Override
public void sendMountPacket(int mountId, int[] passengerIds, List<Player> 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<Player> 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<Player> 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<Player> 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();
}
}
}