diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticArmorType.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticArmorType.java index 80003371..7870e271 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticArmorType.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/cosmetic/types/CosmeticArmorType.java @@ -31,16 +31,12 @@ public class CosmeticArmorType extends Cosmetic { if (user.getUserEmoteManager().isPlayingEmote()) return; // There has to be a better way of doing this... ItemStack cosmeticItem = user.getUserCosmeticItem(this); if (!(entity instanceof HumanEntity humanEntity)) return; - if (equipSlot.equals(EquipmentSlot.OFF_HAND)) { - if (!humanEntity.getInventory().getItemInOffHand().getType().isAir()) return; - } ItemStack equippedItem = humanEntity.getInventory().getItem(equipSlot); if (Settings.getShouldAddEnchants(equipSlot)) { cosmeticItem.addUnsafeEnchantments(equippedItem.getEnchantments()); } NMSHandlers.getHandler().equipmentSlotUpdate(entity.getEntityId(), equipSlot, cosmeticItem, PacketManager.getViewers(entity.getLocation())); - //PacketManager.equipmentSlotUpdate(player, getSlot(), PacketManager.getViewers(player.getLocation())); Old method } public EquipmentSlot getEquipSlot() { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java index eb8faf2f..abda93ff 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -8,6 +8,7 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.Pair; +import com.comphenix.protocol.wrappers.WrappedEnumEntityUseAction; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.api.events.PlayerCosmeticPostEquipEvent; import com.hibiscusmc.hmccosmetics.config.Settings; @@ -19,6 +20,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBalloonType; import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticEmoteType; import com.hibiscusmc.hmccosmetics.gui.Menu; import com.hibiscusmc.hmccosmetics.gui.Menus; +import com.hibiscusmc.hmccosmetics.nms.NMSHandlers; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.user.manager.UserEmoteManager; @@ -56,6 +58,7 @@ public class PlayerGameListener implements Listener { public PlayerGameListener() { registerInventoryClickListener(); registerMenuChangeListener(); + registerEntityStatusListener(); registerPlayerEquipmentListener(); registerPlayerArmListener(); registerEntityUseListener(); @@ -483,6 +486,22 @@ public class PlayerGameListener implements Listener { List> armor = event.getPacket().getSlotStackPairLists().read(0); for (EquipmentSlot equipmentSlot : EquipmentSlot.values()) { + if (equipmentSlot.equals(EquipmentSlot.HAND)) { + Pair pair = new Pair<>(EnumWrappers.ItemSlot.MAINHAND, user.getPlayer().getInventory().getItemInMainHand()); + armor.add(pair); + continue; + } + if (equipmentSlot.equals(EquipmentSlot.OFF_HAND)) { + ItemStack item = null; + if (user.getPlayer().getInventory().getItemInOffHand().getType().isAir()) { + if (user.hasCosmeticInSlot(CosmeticSlot.OFFHAND)) item = user.getUserCosmeticItem(CosmeticSlot.OFFHAND); + } else { + item = user.getPlayer().getInventory().getItemInOffHand(); + } + Pair pair = new Pair<>(EnumWrappers.ItemSlot.OFFHAND, item); + armor.add(pair); + continue; + } CosmeticArmorType cosmeticArmor = (CosmeticArmorType) user.getCosmetic(InventoryUtils.BukkitCosmeticSlot(equipmentSlot)); if (cosmeticArmor == null) continue; Pair pair = new Pair<>(InventoryUtils.itemBukkitSlot(cosmeticArmor.getEquipSlot()), cosmeticArmor.getItem()); @@ -495,6 +514,27 @@ public class PlayerGameListener implements Listener { }); } + private void registerEntityStatusListener() { + ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(HMCCosmeticsPlugin.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_STATUS) { + @Override + public void onPacketSending(PacketEvent event) { + int entityid = event.getPacket().getIntegers().read(0); + byte status = event.getPacket().getBytes().read(0); + + MessagesUtil.sendDebugMessages("EntityStatus Initial " + entityid + " - " + status); + if (status != 55) return; + + CosmeticUser user = CosmeticUsers.getUser(entityid); + if (user == null) { + MessagesUtil.sendDebugMessages("EntityStatus User is null"); + return; + } + if (!user.hasCosmeticInSlot(CosmeticSlot.OFFHAND)) return; + event.setCancelled(true); + } + }); + } + private void registerPlayerArmListener() { ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(HMCCosmeticsPlugin.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Client.ARM_ANIMATION) { @Override diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUsers.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUsers.java index 051cca44..83f94e5d 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUsers.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUsers.java @@ -41,8 +41,8 @@ public class CosmeticUsers { public static CosmeticUser getUser(int entityId) { Entity entity = ServerUtils.getEntity(entityId); if (entity == null) return null; - if (entity.getType().equals(EntityType.PLAYER)) return null; - return COSMETIC_USERS.get(entity.getUniqueId()); + if (!(entity instanceof Player player)) return null; + return COSMETIC_USERS.get(player.getUniqueId()); } public static Set values() { diff --git a/v1_18_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_18_R2/NMSHandler.java b/v1_18_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_18_R2/NMSHandler.java index d2183735..899fc62e 100644 --- a/v1_18_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_18_R2/NMSHandler.java +++ b/v1_18_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_18_R2/NMSHandler.java @@ -55,7 +55,7 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); - if (entity == null) return null; + if (entity == null) continue; return entity; } return null; diff --git a/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java b/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java index 45d083d9..4287d987 100644 --- a/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java +++ b/v1_19_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R1/NMSHandler.java @@ -55,7 +55,7 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); - if (entity == null) return null; + if (entity == null) continue; return entity; } return null; diff --git a/v1_19_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R2/NMSHandler.java b/v1_19_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R2/NMSHandler.java index b6c1bc8d..a1f428b1 100644 --- a/v1_19_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R2/NMSHandler.java +++ b/v1_19_R2/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R2/NMSHandler.java @@ -55,7 +55,7 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); - if (entity == null) return null; + if (entity == null) continue; return entity; } return null; diff --git a/v1_19_R3/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R3/NMSHandler.java b/v1_19_R3/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R3/NMSHandler.java index 104b3e40..b2c283f3 100644 --- a/v1_19_R3/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R3/NMSHandler.java +++ b/v1_19_R3/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_19_R3/NMSHandler.java @@ -58,7 +58,7 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); - if (entity == null) return null; + if (entity == null) continue; return entity; } return null; diff --git a/v1_20_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_20_R1/NMSHandler.java b/v1_20_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_20_R1/NMSHandler.java index c704b215..59f940c3 100644 --- a/v1_20_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_20_R1/NMSHandler.java +++ b/v1_20_R1/src/main/java/com/hibiscusmc/hmccosmetics/nms/v1_20_R1/NMSHandler.java @@ -57,7 +57,7 @@ public class NMSHandler implements com.hibiscusmc.hmccosmetics.nms.NMSHandler { private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); - if (entity == null) return null; + if (entity == null) continue; return entity; } return null;