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 e31e8523..12f488f5 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 @@ -5,6 +5,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.nms.NMSHandlers; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.util.InventoryUtils; +import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import com.hibiscusmc.hmccosmetics.util.packets.PacketManager; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; @@ -43,6 +44,7 @@ public class CosmeticArmorType extends Cosmetic { if (!(user.getEntity() instanceof HumanEntity humanEntity)) return null; if (Settings.getShouldAddEnchants(equipSlot)) { ItemStack equippedItem = humanEntity.getInventory().getItem(equipSlot); + MessagesUtil.sendDebugMessages("CosmeticArmorType - " + equippedItem.getEnchantments().values().toString()); cosmeticItem.addUnsafeEnchantments(equippedItem.getEnchantments()); } // Basically, if force offhand is off AND there is no item in an offhand slot, then the equipment packet to add the cosmetic 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 175740fd..b5cfe07d 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -406,6 +406,7 @@ public class PlayerGameListener implements Listener { CosmeticUser user = CosmeticUsers.getUser(player); if (user == null) return; + if (user.isInWardrobe()) return; CosmeticSlot cosmeticSlot = InventoryUtils.NMSCosmeticSlot(slotClicked); if (cosmeticSlot == null) return; if (!user.hasCosmeticInSlot(cosmeticSlot)) return; @@ -432,9 +433,11 @@ public class PlayerGameListener implements Listener { HashMap items = new HashMap<>(); - for (Cosmetic cosmetic : user.getCosmetics()) { - if ((cosmetic instanceof CosmeticArmorType cosmeticArmorType)) { - items.put(InventoryUtils.getPacketArmorSlot(cosmeticArmorType.getEquipSlot()), user.getUserCosmeticItem(cosmeticArmorType)); + if (!user.isInWardrobe()) { + for (Cosmetic cosmetic : user.getCosmetics()) { + if ((cosmetic instanceof CosmeticArmorType cosmeticArmorType)) { + items.put(InventoryUtils.getPacketArmorSlot(cosmeticArmorType.getEquipSlot()), user.getUserCosmeticItem(cosmeticArmorType)); + } } } @@ -479,6 +482,7 @@ public class PlayerGameListener implements Listener { CosmeticUser user = CosmeticUsers.getUser(player); if (user == null) return; + if (user.isInWardrobe()) return; int slot = event.getPacket().getIntegers().read(2); MessagesUtil.sendDebugMessages("SetSlot Slot " + slot); @@ -497,9 +501,9 @@ public class PlayerGameListener implements Listener { int entityID = event.getPacket().getIntegers().read(0); // User CosmeticUser user = CosmeticUsers.getUser(entityID); - if (user == null) { - return; - } + if (user == null) return; + if (user.isInWardrobe()) return; + List> armor = event.getPacket().getSlotStackPairLists().read(0); for (int i = 0; i < armor.size(); i++) { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java index 15cd8bb8..ce94a485 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/CosmeticUser.java @@ -197,7 +197,7 @@ public class CosmeticUser { for (Cosmetic cosmetic : getCosmetics()) { if (cosmetic instanceof CosmeticArmorType armorType) { - if (getUserEmoteManager().isPlayingEmote()) return; + if (getUserEmoteManager().isPlayingEmote() || isInWardrobe()) return; if (!Settings.isCosmeticForceOffhandCosmeticShow() && armorType.getEquipSlot().equals(EquipmentSlot.OFF_HAND) && !getPlayer().getInventory().getItemInOffHand().getType().isAir()) continue; diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java index af6c8bfc..853e96ce 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserWardrobeManager.java @@ -313,6 +313,8 @@ public class UserWardrobeManager { if (WardrobeSettings.isEquipPumpkin()) { NMSHandlers.getHandler().equipmentSlotUpdate(user.getPlayer().getEntityId(), EquipmentSlot.HEAD, new ItemStack(Material.CARVED_PUMPKIN), viewer); + } else { + PacketManager.equipmentSlotUpdate(user.getPlayer(), true, viewer); // Optifine dumbassery } } }; diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java index e3c783bb..971c1260 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/util/packets/PacketManager.java @@ -25,10 +25,7 @@ import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; public class PacketManager { @@ -88,11 +85,13 @@ public class PacketManager { boolean empty, List sendTo ) { + HashMap items = new HashMap<>(); for (EquipmentSlot slot : EquipmentSlot.values()) { ItemStack item = player.getInventory().getItem(slot); if (empty) item = new ItemStack(Material.AIR); - NMSHandlers.getHandler().equipmentSlotUpdate(player.getEntityId(), slot, item, sendTo); + items.put(slot, item); } + NMSHandlers.getHandler().equipmentSlotUpdate(player.getEntityId(), items, sendTo); } public static void equipmentSlotUpdate( @NotNull Player player,