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 55371823..fe57902c 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 @@ -3,8 +3,10 @@ package com.hibiscusmc.hmccosmetics.user.manager; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.util.HMCCPlayerUtils; +import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import com.hibiscusmc.hmccosmetics.util.packets.HMCCPacketManager; import lombok.Getter; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -46,33 +48,6 @@ public class UserBalloonPufferfish extends UserEntity { @Override public List refreshViewers(Location location) { if (destroyed) return List.of(); //Prevents refreshing a destroyed entity - if (System.currentTimeMillis() - getViewerLastUpdate() <= 1000) return List.of(); //Prevents mass refreshes - ArrayList newPlayers = new ArrayList<>(); - ArrayList removePlayers = new ArrayList<>(); - List players = HMCCPlayerUtils.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); - HMCCPacketManager.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); - HMCCPacketManager.sendEntityDestroyPacket(getPufferFishEntityId(), List.of(viewerPlayer)); - } - } - } - getViewers().removeAll(removePlayers); - setViewerLastUpdate(System.currentTimeMillis()); - return newPlayers; + return super.refreshViewers(location); } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEntity.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEntity.java index 07fd435d..6d142514 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEntity.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/user/manager/UserEntity.java @@ -4,9 +4,11 @@ import com.hibiscusmc.hmccosmetics.config.Settings; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.user.CosmeticUsers; import com.hibiscusmc.hmccosmetics.util.HMCCPlayerUtils; +import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import com.hibiscusmc.hmccosmetics.util.packets.HMCCPacketManager; import lombok.Getter; import lombok.Setter; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -42,10 +44,15 @@ public class UserEntity { ArrayList newPlayers = new ArrayList<>(); ArrayList removePlayers = new ArrayList<>(); List players = HMCCPlayerUtils.getNearbyPlayers(location); + Player ownerPlayer = Bukkit.getPlayer(owner); + if (ownerPlayer == null) { + MessagesUtil.sendDebugMessages("Owner is null (refreshViewers), returning empty list"); + return List.of(); + } for (Player player : players) { CosmeticUser user = CosmeticUsers.getUser(player); - if (user != null && owner != user.getUniqueId() && user.isInWardrobe()) { // Fixes issue where players in wardrobe would see other players cosmetics if they were not in wardrobe + if (user != null && owner != user.getUniqueId() && user.isInWardrobe() && !player.canSee(ownerPlayer)) { // Fixes issue where players in wardrobe would see other players cosmetics if they were not in wardrobe removePlayers.add(player); HMCCPacketManager.sendEntityDestroyPacket(ids, List.of(player)); continue;