From 8b0fcc5da97722d03c6fe4edb7fcc5383b5cacef Mon Sep 17 00:00:00 2001 From: LoJoSho Date: Tue, 29 Aug 2023 17:41:35 -0500 Subject: [PATCH] fix: balloon pufferfish not properly being destroyed out of range --- .../user/manager/UserBalloonManager.java | 2 +- .../user/manager/UserBalloonPufferfish.java | 51 ++++++++++++++++--- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonManager.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonManager.java index e8d1dc15..e46f5b8c 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonManager.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonManager.java @@ -135,7 +135,7 @@ public class UserBalloonManager { public int getPufferfishBalloonId() { - return pufferfish.getId(); + return pufferfish.getPufferFishEntityId(); } public UUID getPufferfishBalloonUniqueId() { return pufferfish.getUuid(); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonPufferfish.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonPufferfish.java index 8e41151f..b5f3e416 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonPufferfish.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserBalloonPufferfish.java @@ -1,22 +1,29 @@ package com.hibiscusmc.hmccosmetics.user.manager; +import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; +import com.hibiscusmc.hmccosmetics.util.PlayerUtils; import com.hibiscusmc.hmccosmetics.util.packets.PacketManager; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; public class UserBalloonPufferfish extends UserEntity { - private int id; + private int pufferFishEntityId; private UUID uuid; - public UserBalloonPufferfish(UUID owner, int id, UUID uuid) { + public UserBalloonPufferfish(UUID owner, int pufferFishEntityId, UUID uuid) { super(owner); - this.id = id; + this.pufferFishEntityId = pufferFishEntityId; this.uuid = uuid; } - public int getId() { - return id; + public int getPufferFishEntityId() { + return pufferFishEntityId; } public UUID getUuid() { @@ -24,7 +31,39 @@ public class UserBalloonPufferfish extends UserEntity { } public void hidePufferfish() { - PacketManager.sendEntityDestroyPacket(id, getViewers()); + PacketManager.sendEntityDestroyPacket(pufferFishEntityId, getViewers()); getViewers().clear(); } + + @Override + public List refreshViewers(Location location) { + if (System.currentTimeMillis() - getViewerLastUpdate() <= 1000) return List.of(); //Prevents mass refreshes + ArrayList newPlayers = new ArrayList<>(); + ArrayList removePlayers = new ArrayList<>(); + List players = PlayerUtils.getNearbyPlayers(location); + + for (Player player : players) { + CosmeticUser user = CosmeticUsers.getUser(player); + if (user != null && getOwner() != user.getUniqueId() && user.isInWardrobe()) { // Fixes issue where players in wardrobe would see other players cosmetics if they were not in wardrobe + removePlayers.add(player); + PacketManager.sendEntityDestroyPacket(getPufferFishEntityId(), List.of(player)); + continue; + } + if (!getViewers().contains(player)) { + getViewers().add(player); + newPlayers.add(player); + continue; + } + // bad loopdy loops + for (Player viewerPlayer : getViewers()) { + if (!players.contains(viewerPlayer)) { + removePlayers.add(viewerPlayer); + PacketManager.sendEntityDestroyPacket(getPufferFishEntityId(), List.of(viewerPlayer)); + } + } + } + getViewers().removeAll(removePlayers); + setViewerLastUpdate(System.currentTimeMillis()); + return newPlayers; + } }