From 0ea5c92d86f55231946bbabe6924a1aad2b8d204 Mon Sep 17 00:00:00 2001 From: Fisher2911 Date: Sun, 3 Apr 2022 22:27:08 -0400 Subject: [PATCH] Fixed issue with not opening wardrobe inventory --- .../hmccosmetics/database/Database.java | 6 ++-- .../listener/WardrobeListener.java | 34 +++++++++++-------- .../hmccosmetics/packet/PacketManager.java | 2 +- .../fisher2911/hmccosmetics/user/User.java | 2 +- .../hmccosmetics/user/Wardrobe.java | 6 +++- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/common/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java b/common/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java index 1a355490..2846f9d1 100644 --- a/common/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java +++ b/common/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java @@ -139,9 +139,9 @@ public class Database { }); onComplete.accept(new NPCUser( - id, - PlayerArmor.empty(), - new EntityIds(entity.getEntityId(), armorStandId, balloonId, wardrobeViewerId) + id, + PlayerArmor.empty(), + new EntityIds(entity.getEntityId(), armorStandId, balloonId, wardrobeViewerId) ) ); } diff --git a/common/src/main/java/io/github/fisher2911/hmccosmetics/listener/WardrobeListener.java b/common/src/main/java/io/github/fisher2911/hmccosmetics/listener/WardrobeListener.java index b2555d21..ac8fcd1a 100644 --- a/common/src/main/java/io/github/fisher2911/hmccosmetics/listener/WardrobeListener.java +++ b/common/src/main/java/io/github/fisher2911/hmccosmetics/listener/WardrobeListener.java @@ -1,13 +1,16 @@ package io.github.fisher2911.hmccosmetics.listener; +import com.github.retrooper.packetevents.PacketEvents; +import com.github.retrooper.packetevents.event.PacketListenerAbstract; +import com.github.retrooper.packetevents.event.PacketReceiveEvent; +import com.github.retrooper.packetevents.protocol.packettype.PacketType; import io.github.fisher2911.hmccosmetics.HMCCosmetics; import io.github.fisher2911.hmccosmetics.user.UserManager; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.player.PlayerInteractEvent; public class WardrobeListener implements Listener { @@ -17,18 +20,21 @@ public class WardrobeListener implements Listener { public WardrobeListener(final HMCCosmetics plugin) { this.plugin = plugin; this.userManager = this.plugin.getUserManager(); - } - - @EventHandler - public void onPunch(final PlayerInteractEvent event) { - final Player player = event.getPlayer(); - final Action action = event.getAction(); - if (action != Action.LEFT_CLICK_AIR && action != Action.LEFT_CLICK_BLOCK) return; - this.userManager.get(player.getUniqueId()).ifPresent(user -> { - if (!user.getWardrobe().isActive()) return; - this.plugin.getCosmeticsMenu().openDefault(player); - } - ); + PacketEvents.getAPI().getEventManager().registerListener( + new PacketListenerAbstract() { + @Override + public void onPacketReceive(PacketReceiveEvent event) { + if (event.getPacketType() != PacketType.Play.Client.ANIMATION) return; + if (!(event.getPlayer() instanceof final Player player)) return; + WardrobeListener.this.userManager.get(player.getUniqueId()).ifPresent(user -> { + if (!user.getWardrobe().isActive()) return; + Bukkit.getScheduler().runTask(plugin, () -> { + WardrobeListener.this.plugin.getCosmeticsMenu().openDefault(player); + }); + } + ); + } + }); } @EventHandler diff --git a/common/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java b/common/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java index 96a9a742..c9e7a837 100644 --- a/common/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java +++ b/common/src/main/java/io/github/fisher2911/hmccosmetics/packet/PacketManager.java @@ -301,7 +301,7 @@ public class PacketManager { public static void sendCameraPacket(final int entityId, final Player... sendTo) { for (final Player p : sendTo) { - PacketEvents.getAPI().getPlayerManager().sendPacketAsync(p, new WrapperPlayServerCamera(entityId)); + PacketEvents.getAPI().getPlayerManager().sendPacketSilentlyAsync(p, new WrapperPlayServerCamera(entityId)); } } diff --git a/common/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java b/common/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java index b8b0668d..7caebc44 100644 --- a/common/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java +++ b/common/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java @@ -53,7 +53,7 @@ public class User extends BaseUser { final Player player = this.getPlayer(); if (player == null || player.isDead()) return false; if (player.getUniqueId().equals(other.getUniqueId()) && this.hidden) return false; - if (this.isWardrobeActive()) return false; + if (this.isWardrobeActive() && !(this instanceof Wardrobe)) return false; final ItemStack itemStack = player.getInventory().getItemInMainHand(); if (itemStack != null && itemStack.getType() == Material.TRIDENT) { final ItemMeta itemMeta = itemStack.getItemMeta(); diff --git a/common/src/main/java/io/github/fisher2911/hmccosmetics/user/Wardrobe.java b/common/src/main/java/io/github/fisher2911/hmccosmetics/user/Wardrobe.java index e3ce6a16..8cbd9651 100644 --- a/common/src/main/java/io/github/fisher2911/hmccosmetics/user/Wardrobe.java +++ b/common/src/main/java/io/github/fisher2911/hmccosmetics/user/Wardrobe.java @@ -52,7 +52,11 @@ public class Wardrobe extends User { () -> { if (settings.inDistanceOfStatic(viewer.getLocation())) { this.currentLocation = settings.getWardrobeLocation(); - userManager.get(viewer.getUniqueId()).ifPresent(user -> userManager.sendUpdatePacket(user, userManager.getEmptyItemList())); + userManager.get(viewer.getUniqueId()).ifPresent(user -> { + userManager.sendUpdatePacket(user, userManager.getEmptyItemList()); + user.despawnAttached(); + user.despawnBalloon(); + }); PacketManager.sendEntitySpawnPacket( settings.getViewerLocation(), this.entityIds.wardrobeViewer(),