From 7865b8b372e70ec2466e3cf3077d9a4c1a8bf02b Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Thu, 26 Jun 2025 12:48:21 -0500 Subject: [PATCH] feat: start moving to wrappers to help with read/write with packets --- .../packets/PacketInterface.java | 17 ++++--- .../wrapper/ContainerContentWrapper.java | 20 +++++++++ .../wrapper/EntityEquipmentWrapper.java | 19 ++++++++ .../packets/wrapper/PassengerWrapper.java | 19 ++++++++ .../packets/wrapper/SlotContentWrapper.java | 20 +++++++++ .../nms/v1_21_R5/NMSPacketChannel.java | 45 +++++++++++-------- 6 files changed, 113 insertions(+), 27 deletions(-) create mode 100644 common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/ContainerContentWrapper.java create mode 100644 common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/EntityEquipmentWrapper.java create mode 100644 common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PassengerWrapper.java create mode 100644 common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/SlotContentWrapper.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 df16073..47b53ec 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/packets/PacketInterface.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/PacketInterface.java @@ -1,28 +1,27 @@ 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 org.bukkit.entity.Player; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import java.util.List; -import java.util.Map; - public interface PacketInterface { - default PacketAction writeContainerContent(@NotNull Player player, Integer windowId, @NotNull List slotData) { + default PacketAction writeContainerContent(@NotNull Player player, ContainerContentWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction writeSlotContent(@NotNull Player player, Integer windowId, Integer slot, @NotNull ItemStack itemStack) { + default PacketAction writeSlotContent(@NotNull Player player, SlotContentWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction writeEquipmentContent(@NotNull Player player, @NotNull Map armor) { + default PacketAction writeEquipmentContent(@NotNull Player player, EntityEquipmentWrapper wrapper) { return PacketAction.NOTHING; } - default PacketAction writePassengerContent(@NotNull Player player, Integer owner, List passengers) { + default PacketAction writePassengerContent(@NotNull Player player, PassengerWrapper wrapper) { return PacketAction.NOTHING; } diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/ContainerContentWrapper.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/ContainerContentWrapper.java new file mode 100644 index 0000000..65f54ad --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/ContainerContentWrapper.java @@ -0,0 +1,20 @@ +package me.lojosho.hibiscuscommons.packets.wrapper; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +@Getter @Setter +public class ContainerContentWrapper { + + private Integer windowId; + private List slotData; + + public ContainerContentWrapper(@NotNull Integer windowId, @NotNull List slotData) { + this.windowId = windowId; + this.slotData = slotData; + } +} 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 new file mode 100644 index 0000000..a0b18f2 --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/EntityEquipmentWrapper.java @@ -0,0 +1,19 @@ +package me.lojosho.hibiscuscommons.packets.wrapper; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; + +@Getter @Setter +public class EntityEquipmentWrapper { + + private Map armor; + + public EntityEquipmentWrapper(@NotNull Map armor) { + this.armor = armor; + } +} diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PassengerWrapper.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PassengerWrapper.java new file mode 100644 index 0000000..b36fa12 --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/PassengerWrapper.java @@ -0,0 +1,19 @@ +package me.lojosho.hibiscuscommons.packets.wrapper; + +import lombok.Getter; +import lombok.Setter; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +@Getter @Setter +public class PassengerWrapper { + + private int owner; + private List passengers; + + public PassengerWrapper(@NotNull Integer owner, @NotNull List passengers) { + this.owner = owner; + this.passengers = passengers; + } +} diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/SlotContentWrapper.java b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/SlotContentWrapper.java new file mode 100644 index 0000000..588e5a7 --- /dev/null +++ b/common/src/main/java/me/lojosho/hibiscuscommons/packets/wrapper/SlotContentWrapper.java @@ -0,0 +1,20 @@ +package me.lojosho.hibiscuscommons.packets.wrapper; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +@Setter @Getter +public class SlotContentWrapper { + + private Integer windowId; + private int slot; + private ItemStack itemStack; + + public SlotContentWrapper(Integer windowId, Integer slot, @NotNull ItemStack itemStack) { + this.windowId = windowId; + this.slot = slot; + this.itemStack = itemStack; + } +} 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 0282afa..243798b 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,6 +7,10 @@ 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.plugins.SubPlugins; import me.lojosho.hibiscuscommons.util.MessagesUtil; import net.minecraft.core.NonNullList; @@ -64,8 +68,8 @@ public class NMSPacketChannel extends ChannelDuplexHandler { AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().writeContainerContent(player, windowId, bukkitItems); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); + PacketAction pluginAction = plugin.getPacketInterface().writeContainerContent(player, new ContainerContentWrapper(windowId, bukkitItems)); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); @@ -88,9 +92,8 @@ public class NMSPacketChannel extends ChannelDuplexHandler { AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().writeSlotContent(player, windowId, slot, bukkitItem); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); - + PacketAction pluginAction = plugin.getPacketInterface().writeSlotContent(player, new SlotContentWrapper(windowId, slot, bukkitItem)); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null; @@ -102,27 +105,33 @@ public class NMSPacketChannel extends ChannelDuplexHandler { } private Packet handlePlayerEquipment(@NotNull ClientboundSetEquipmentPacket packet) { - final List> armor = packet.getSlots(); - final HashMap bukkitArmor = new HashMap<>(); - for (Pair piece : armor) { + final List> nmsArmor = packet.getSlots(); + HashMap bukkitArmor = new HashMap<>(); + for (Pair piece : nmsArmor) { EquipmentSlot slot = CraftEquipmentSlot.getSlot(piece.getFirst()); org.bukkit.inventory.ItemStack itemStack = CraftItemStack.asBukkitCopy(piece.getSecond()); bukkitArmor.put(slot, itemStack); } + final var finalArmor = bukkitArmor; + AtomicReference> armor = new AtomicReference<>(new HashMap<>()); + AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().writeEquipmentContent(player, bukkitArmor); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); - + EntityEquipmentWrapper wrapper = new EntityEquipmentWrapper(finalArmor); + PacketAction pluginAction = plugin.getPacketInterface().writeEquipmentContent(player, wrapper); + if (pluginAction != PacketAction.NOTHING) { + armor.set(wrapper.getArmor()); + 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 : bukkitArmor.entrySet()) { + for (Map.Entry entry : armor.get().entrySet()) { net.minecraft.world.entity.EquipmentSlot slot = CraftEquipmentSlot.getNMS(entry.getKey()); ItemStack itemStack = CraftItemStack.asNMSCopy(entry.getValue()); newArmor.add(new Pair<>(slot, itemStack)); @@ -139,8 +148,8 @@ public class NMSPacketChannel extends ChannelDuplexHandler { AtomicReference action = new AtomicReference<>(PacketAction.NOTHING); SubPlugins.getSubPlugins().forEach(plugin -> { - PacketAction pluginAction = plugin.getPacketInterface().writePassengerContent(player, ownerId, passengers); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); + PacketAction pluginAction = plugin.getPacketInterface().writePassengerContent(player, new PassengerWrapper(ownerId, passengers)); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); @@ -176,7 +185,7 @@ public class NMSPacketChannel extends ChannelDuplexHandler { SubPlugins.getSubPlugins().forEach(plugin -> { PacketAction pluginAction = plugin.getPacketInterface().readInventoryClick(player, clickType.id(), slotClicked); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null; @@ -190,7 +199,7 @@ public class NMSPacketChannel extends ChannelDuplexHandler { SubPlugins.getSubPlugins().forEach(plugin -> { PacketAction pluginAction = plugin.getPacketInterface().readPlayerAction(player, playerAction.ordinal()); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null; @@ -202,7 +211,7 @@ public class NMSPacketChannel extends ChannelDuplexHandler { SubPlugins.getSubPlugins().forEach(plugin -> { PacketAction pluginAction = plugin.getPacketInterface().readPlayerArm(player); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null; @@ -214,7 +223,7 @@ public class NMSPacketChannel extends ChannelDuplexHandler { SubPlugins.getSubPlugins().forEach(plugin -> { PacketAction pluginAction = plugin.getPacketInterface().readEntityHandle(player); - if (pluginAction != PacketAction.NOTHING) action.set(PacketAction.CANCELLED); + if (pluginAction != PacketAction.NOTHING) action.set(pluginAction); }); if (action.get() == PacketAction.CANCELLED) return null;