mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-19 15:09:19 +00:00
feat: refactor UserEntity refreshViewers
This commit is contained in:
@@ -13,6 +13,7 @@ import org.bukkit.entity.Entity;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -41,36 +42,41 @@ public class UserEntity {
|
|||||||
|
|
||||||
public List<Player> refreshViewers(Location location) {
|
public List<Player> refreshViewers(Location location) {
|
||||||
if (System.currentTimeMillis() - viewerLastUpdate <= 1000) return List.of(); //Prevents mass refreshes
|
if (System.currentTimeMillis() - viewerLastUpdate <= 1000) return List.of(); //Prevents mass refreshes
|
||||||
ArrayList<Player> newPlayers = new ArrayList<>();
|
|
||||||
ArrayList<Player> removePlayers = new ArrayList<>();
|
|
||||||
List<Player> players = HMCCPacketManager.getViewers(location);
|
|
||||||
Entity ownerPlayer = Bukkit.getEntity(owner);
|
Entity ownerPlayer = Bukkit.getEntity(owner);
|
||||||
if (ownerPlayer == null) {
|
if (ownerPlayer == null) {
|
||||||
MessagesUtil.sendDebugMessages("Owner is null (refreshViewers), returning empty list");
|
MessagesUtil.sendDebugMessages("Owner is null (refreshViewers), returning empty list");
|
||||||
return List.of();
|
return List.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final HashSet<Player> players = new HashSet<>(HMCCPacketManager.getViewers(location));
|
||||||
|
final ArrayList<Player> newPlayers = new ArrayList<>();
|
||||||
|
final ArrayList<Player> removePlayers = new ArrayList<>();
|
||||||
|
|
||||||
|
// Go through all nearby players, check if they are new to the viewers list.
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
CosmeticUser user = CosmeticUsers.getUser(player);
|
CosmeticUser user = CosmeticUsers.getUser(player);
|
||||||
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
|
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);
|
removePlayers.add(player);
|
||||||
HMCCPacketManager.sendEntityDestroyPacket(ids, List.of(player));
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!viewers.contains(player)) {
|
if (!viewers.contains(player)) {
|
||||||
viewers.add(player);
|
viewers.add(player);
|
||||||
newPlayers.add(player);
|
newPlayers.add(player);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
// bad loopdy loops
|
}
|
||||||
|
// Basically, if they are not nearby, they are still in the viewers and we need to kick em to the curb
|
||||||
for (Player viewerPlayer : viewers) {
|
for (Player viewerPlayer : viewers) {
|
||||||
if (!players.contains(viewerPlayer)) {
|
if (!players.contains(viewerPlayer)) {
|
||||||
removePlayers.add(viewerPlayer);
|
removePlayers.add(viewerPlayer);
|
||||||
HMCCPacketManager.sendEntityDestroyPacket(ids, List.of(viewerPlayer));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If there are players for removal, send the packets to them
|
||||||
|
if (!removePlayers.isEmpty()) {
|
||||||
|
HMCCPacketManager.sendEntityDestroyPacket(ids, removePlayers);
|
||||||
viewers.removeAll(removePlayers);
|
viewers.removeAll(removePlayers);
|
||||||
|
}
|
||||||
setViewerLastUpdate(System.currentTimeMillis());
|
setViewerLastUpdate(System.currentTimeMillis());
|
||||||
return newPlayers;
|
return newPlayers;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user