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 219d8b32..8c97881c 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/listener/PlayerGameListener.java @@ -9,6 +9,8 @@ import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.Pair; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; +import com.hibiscusmc.hmccosmetics.api.PlayerCosmeticEquipEvent; +import com.hibiscusmc.hmccosmetics.api.PlayerCosmeticPostEquipEvent; import com.hibiscusmc.hmccosmetics.config.Settings; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; @@ -23,7 +25,9 @@ import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.user.manager.UserEmoteManager; 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.Location; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; @@ -346,6 +350,16 @@ public class PlayerGameListener implements Listener { } } + @EventHandler + public void onPlayerCosemticEquip(PlayerCosmeticPostEquipEvent event) { + CosmeticUser user = event.getUser(); + if (user.isInWardrobe() && event.getCosmetic().getSlot().equals(CosmeticSlot.BALLOON)) { + Location NPCLocation = user.getWardrobeManager().getNpcLocation(); + PacketManager.sendTeleportPacket(user.getBalloonManager().getPufferfishBalloonId(), NPCLocation.add(Settings.getBalloonOffset()), false, List.of(event.getUser().getPlayer())); + user.getBalloonManager().getModelEntity().teleport(NPCLocation.add(Settings.getBalloonOffset())); + } + } + private void registerInventoryClickListener() { ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(HMCCosmeticsPlugin.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Client.WINDOW_CLICK) { @Override 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 fd7be041..dfc8dff7 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 @@ -120,8 +120,9 @@ public class UserWardrobeManager { user.getBalloonManager().sendLeashPacket(NPC_ID); //PacketManager.sendLeashPacket(VIEWER.getBalloonEntity().getModelId(), NPC_ID, viewer); - PacketManager.sendTeleportPacket(user.getBalloonManager().getPufferfishBalloonId(), npcLocation.clone().add(Settings.getBalloonOffset()), false, viewer); - user.getBalloonManager().getModelEntity().teleport(npcLocation.clone().add(Settings.getBalloonOffset())); + Location balloonLocation = npcLocation.clone().add(Settings.getBalloonOffset()); + PacketManager.sendTeleportPacket(user.getBalloonManager().getPufferfishBalloonId(), balloonLocation , false, viewer); + user.getBalloonManager().getModelEntity().teleport(balloonLocation); } if (WardrobeSettings.getEnabledBossbar()) { @@ -268,8 +269,9 @@ public class UserWardrobeManager { } if (user.hasCosmeticInSlot(CosmeticSlot.BALLOON)) { - PacketManager.sendTeleportPacket(user.getBalloonManager().getPufferfishBalloonId(), npcLocation.add(Settings.getBalloonOffset()), false, viewer); - user.getBalloonManager().getModelEntity().teleport(npcLocation.add(Settings.getBalloonOffset())); + // The two lines below broke, solved by listening to PlayerCosmeticPostEquipEvent + //PacketManager.sendTeleportPacket(user.getBalloonManager().getPufferfishBalloonId(), npcLocation.add(Settings.getBalloonOffset()), false, viewer); + //user.getBalloonManager().getModelEntity().teleport(npcLocation.add(Settings.getBalloonOffset())); user.getBalloonManager().sendRemoveLeashPacket(outsideViewers); PacketManager.sendEntityDestroyPacket(user.getBalloonManager().getModelId(), outsideViewers); user.getBalloonManager().sendLeashPacket(NPC_ID); @@ -302,4 +304,8 @@ public class UserWardrobeManager { RUNNING, STOPPING, } + + public Location getNpcLocation() { + return npcLocation; + } }