From ee96da9abd399e34b40dbeaf18dbae936ebb5f48 Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Thu, 26 Jun 2025 14:43:04 -0500 Subject: [PATCH] feat: latest changes and wrappers --- .../packets/PacketInterface.java | 17 +++--- .../wrapper/EntityEquipmentWrapper.java | 4 +- .../wrapper/InventoryClickWrapper.java | 17 ++++++ .../packets/wrapper/PlayerActionWrapper.java | 14 +++++ .../nms/v1_21_R5/NMSPacketChannel.java | 58 +++++++++---------- .../nms/v1_21_R5/NMSPackets.java | 1 + 6 files changed, 68 insertions(+), 43 deletions(-) create mode 100644 common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/InventoryClickWrapper.java create mode 100644 common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PlayerActionWrapper.java diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/PacketInterface.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/PacketInterface.java index 47b53ec..df61dd4 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/packets/PacketInterface.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/PacketInterface.java @@ -1,36 +1,33 @@ package me.lojosho.hibiscuscommons.packets; -import me.lojosho.hibiscuscommons.packets.wrapper.ContainerContentWrapper; -import me.lojosho.hibiscuscommons.packets.wrapper.EntityEquipmentWrapper; -import me.lojosho.hibiscuscommons.packets.wrapper.PassengerWrapper; -import me.lojosho.hibiscuscommons.packets.wrapper.SlotContentWrapper; +import me.lojosho.hibiscuscommons.packets.wrapper.*; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; public interface PacketInterface { - default PacketAction writeContainerContent(@NotNull Player player, ContainerContentWrapper wrapper) { + default PacketAction writeContainerContent(@NotNull Player player, @NotNull ContainerContentWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction writeSlotContent(@NotNull Player player, SlotContentWrapper wrapper) { + default PacketAction writeSlotContent(@NotNull Player player, @NotNull SlotContentWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction writeEquipmentContent(@NotNull Player player, EntityEquipmentWrapper wrapper) { + default PacketAction writeEquipmentContent(@NotNull Player player, @NotNull EntityEquipmentWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction writePassengerContent(@NotNull Player player, PassengerWrapper wrapper) { + default PacketAction writePassengerContent(@NotNull Player player, @NotNull PassengerWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction readInventoryClick(@NotNull Player player, Integer clickType, Integer slotNumber) { + default PacketAction readInventoryClick(@NotNull Player player, @NotNull InventoryClickWrapper wrapper) { return PacketAction.NOTHING; // Override } - default PacketAction readPlayerAction(@NotNull Player player, Integer actionType) { + default PacketAction readPlayerAction(@NotNull Player player, @NotNull PlayerActionWrapper wrapper) { return PacketAction.NOTHING; // Override } diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/EntityEquipmentWrapper.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/EntityEquipmentWrapper.java index a0b18f2..0c8667d 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/EntityEquipmentWrapper.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/EntityEquipmentWrapper.java @@ -11,9 +11,11 @@ import java.util.Map; @Getter @Setter public class EntityEquipmentWrapper { + private int entityId; private Map armor; - public EntityEquipmentWrapper(@NotNull Map armor) { + public EntityEquipmentWrapper(int entityId, @NotNull Map armor) { + this.entityId = entityId; this.armor = armor; } } diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/InventoryClickWrapper.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/InventoryClickWrapper.java new file mode 100644 index 0000000..7eded2f --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/InventoryClickWrapper.java @@ -0,0 +1,17 @@ +package me.lojosho.hibiscuscommons.packets.wrapper; + +import lombok.Getter; +import lombok.Setter; +import org.jetbrains.annotations.NotNull; + +@Getter @Setter +public class InventoryClickWrapper { + + private int clickType; + private int slotNumber; + + public InventoryClickWrapper(@NotNull Integer clickType, @NotNull Integer slotNumber) { + this.clickType = clickType; + this.slotNumber = slotNumber; + } +} diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PlayerActionWrapper.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PlayerActionWrapper.java new file mode 100644 index 0000000..b3475fe --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PlayerActionWrapper.java @@ -0,0 +1,14 @@ +package me.lojosho.hibiscuscommons.packets.wrapper; + +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class PlayerActionWrapper { + + private String actionType; + + public PlayerActionWrapper(String actionType) { + this.actionType = actionType; + } +} diff --git a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPacketChannel.java b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPacketChannel.java index 243798b..adba04f 100644 --- a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPacketChannel.java +++ b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPacketChannel.java @@ -7,10 +7,7 @@ import io.netty.channel.ChannelPromise; import lombok.Getter; import me.lojosho.hibiscuscommons.nms.NMSHandlers; import me.lojosho.hibiscuscommons.packets.PacketAction; -import me.lojosho.hibiscuscommons.packets.wrapper.ContainerContentWrapper; -import me.lojosho.hibiscuscommons.packets.wrapper.EntityEquipmentWrapper; -import me.lojosho.hibiscuscommons.packets.wrapper.PassengerWrapper; -import me.lojosho.hibiscuscommons.packets.wrapper.SlotContentWrapper; +import me.lojosho.hibiscuscommons.packets.wrapper.*; import me.lojosho.hibiscuscommons.plugins.SubPlugins; import me.lojosho.hibiscuscommons.util.MessagesUtil; import net.minecraft.core.NonNullList; @@ -66,46 +63,47 @@ public class NMSPacketChannel extends ChannelDuplexHandler { List bukkitItems = slotData.stream().map(CraftItemStack::asBukkitCopy).toList(); AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); + ContainerContentWrapper wrapper = new ContainerContentWrapper(windowId, bukkitItems); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().writeContainerContent(player, new ContainerContentWrapper(windowId, bukkitItems)); + PacketAction pluginAction = plugin.getPacketInterface().writeContainerContent(player, wrapper); if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); - }); - List nmsItems = bukkitItems.stream().map(CraftItemStack::asNMSCopy).toList(); - if (action.get() == PacketAction.CANCELLED) return null; if (action.get() == PacketAction.NOTHING) return packet; + List nmsItems = wrapper.getSlotData().stream().map(CraftItemStack::asNMSCopy).toList(); return new ClientboundContainerSetContentPacket(0, packet.stateId(), nmsItems, packet.carriedItem()); } private Packet handleSlotChange(@NotNull ClientboundContainerSetSlotPacket packet) { MessagesUtil.sendDebugMessages("SetSlot Initial "); - Integer windowId = packet.getContainerId(); - Integer slot = packet.getSlot(); - ItemStack item = packet.getItem(); + final int windowId = packet.getContainerId(); + final int slot = packet.getSlot(); + final ItemStack item = packet.getItem(); org.bukkit.inventory.ItemStack bukkitItem = CraftItemStack.asBukkitCopy(item); AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); - SubPlugins.getSubPlugins().forEach(plugin -> { + SlotContentWrapper wrapper = new SlotContentWrapper(windowId, slot, bukkitItem); - PacketAction pluginAction = plugin.getPacketInterface().writeSlotContent(player, new SlotContentWrapper(windowId, slot, bukkitItem)); + SubPlugins.getSubPlugins().forEach(plugin -> { + PacketAction pluginAction = plugin.getPacketInterface().writeSlotContent(player, wrapper); if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null; if (action.get() == PacketAction.NOTHING) return packet; - final ItemStack nmsItem = CraftItemStack.asNMSCopy(bukkitItem); + final ItemStack nmsItem = CraftItemStack.asNMSCopy(wrapper.getItemStack()); - return new ClientboundContainerSetSlotPacket(0, packet.getStateId(), slot, nmsItem); + return new ClientboundContainerSetSlotPacket(0, packet.getStateId(), wrapper.getSlot(), nmsItem); } private Packet handlePlayerEquipment(@NotNull ClientboundSetEquipmentPacket packet) { final List> nmsArmor = packet.getSlots(); + final int entity = packet.getEntity(); HashMap bukkitArmor = new HashMap<>(); for (Pair piece : nmsArmor) { EquipmentSlot slot = CraftEquipmentSlot.getSlot(piece.getFirst()); @@ -113,25 +111,20 @@ public class NMSPacketChannel extends ChannelDuplexHandler { bukkitArmor.put(slot, itemStack); } - final var finalArmor = bukkitArmor; - AtomicReference> armor = new AtomicReference<>(new HashMap<>()); - AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); - SubPlugins.getSubPlugins().forEach(plugin -> { + EntityEquipmentWrapper wrapper = new EntityEquipmentWrapper(entity, bukkitArmor); - EntityEquipmentWrapper wrapper = new EntityEquipmentWrapper(finalArmor); + SubPlugins.getSubPlugins().forEach(plugin -> { PacketAction pluginAction = plugin.getPacketInterface().writeEquipmentContent(player, wrapper); - if (pluginAction != PacketAction.NOTHING) { - armor.set(wrapper.getArmor()); - action.set(pluginAction); - } + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null; if (action.get() == PacketAction.NOTHING) return packet; + List> newArmor = new ArrayList<>(); - for (Map.Entry entry : armor.get().entrySet()) { + for (Map.Entry entry : wrapper.getArmor().entrySet()) { net.minecraft.world.entity.EquipmentSlot slot = CraftEquipmentSlot.getNMS(entry.getKey()); ItemStack itemStack = CraftItemStack.asNMSCopy(entry.getValue()); newArmor.add(new Pair<>(slot, itemStack)); @@ -141,16 +134,17 @@ public class NMSPacketChannel extends ChannelDuplexHandler { } private Packet handlePassengerSet(@NotNull ClientboundSetPassengersPacket packet) { - Integer ownerId = packet.getVehicle(); + int ownerId = packet.getVehicle(); List passengers = Arrays.stream(packet.getPassengers()).boxed().collect(Collectors.toList()); MessagesUtil.sendDebugMessages("Mount Packet Sent - Read - EntityID: " + ownerId); AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); + PassengerWrapper wrapper = new PassengerWrapper(ownerId, passengers); SubPlugins.getSubPlugins().forEach(plugin -> { - - PacketAction pluginAction = plugin.getPacketInterface().writePassengerContent(player, new PassengerWrapper(ownerId, passengers)); - if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); - + PacketAction pluginAction = plugin.getPacketInterface().writePassengerContent(player, wrapper); + if (pluginAction != PacketAction.NOTHING) { + action.set(pluginAction); + } }); if (action.get() == PacketAction.CANCELLED) return null; @@ -184,7 +178,7 @@ public class NMSPacketChannel extends ChannelDuplexHandler { AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().readInventoryClick(player, clickType.id(), slotClicked); + PacketAction pluginAction = plugin.getPacketInterface().readInventoryClick(player, new InventoryClickWrapper(clickType.id(), slotClicked)); if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); @@ -198,7 +192,7 @@ public class NMSPacketChannel extends ChannelDuplexHandler { AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().readPlayerAction(player, playerAction.ordinal()); + PacketAction pluginAction = plugin.getPacketInterface().readPlayerAction(player, new PlayerActionWrapper(playerAction.name())); if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); diff --git a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java index 88cbc39..16905be 100644 --- a/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java +++ b/v1_21_R5/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R5/NMSPackets.java @@ -251,6 +251,7 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons. passenger.setId(id); return passenger; }).toList(); + fakeNmsEntity.setId(mountId); fakeNmsEntity.passengers = ImmutableList.copyOf(passengers); ClientboundSetPassengersPacket packet = new ClientboundSetPassengersPacket(fakeNmsEntity); fakeNmsEntity.passengers = ImmutableList.of();