From 096e62b86523135d221163c39dfa14d4a379bf1b Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 25 Jun 2021 22:44:01 -0300 Subject: [PATCH] removes retained player references, Fixes #953 --- src/main/java/carpet/logging/HUDController.java | 15 ++++++++++----- .../script/annotation/FunctionsTestClass.java | 6 +++--- src/main/java/carpet/script/api/Auxiliary.java | 6 +++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/carpet/logging/HUDController.java b/src/main/java/carpet/logging/HUDController.java index 06891708..2b679fb1 100644 --- a/src/main/java/carpet/logging/HUDController.java +++ b/src/main/java/carpet/logging/HUDController.java @@ -42,10 +42,11 @@ public class HUDController } public static Map> player_huds = new HashMap<>(); + + //keyed with player names so unlogged players don't hold the reference + public static final Map scarpet_headers = new HashMap<>(); - public static final Map scarpet_headers = new HashMap<>(); - - public static final Map scarpet_footers = new HashMap<>(); + public static final Map scarpet_footers = new HashMap<>(); public static void resetScarpetHUDs() { scarpet_headers.clear(); @@ -54,6 +55,7 @@ public class HUDController public static void addMessage(ServerPlayerEntity player, BaseText hudMessage) { + if (player == null) return; if (!player_huds.containsKey(player)) { player_huds.put(player, new ArrayList<>()); @@ -80,7 +82,10 @@ public class HUDController player_huds.clear(); - scarpet_footers.forEach(HUDController::addMessage); + server.getPlayerManager().getPlayerList().forEach(p -> { + BaseText scarpetFOoter = scarpet_footers.get(p.getEntityName()); + if (scarpetFOoter != null) HUDController.addMessage(p, scarpetFOoter); + }); if (LoggerRegistry.__tps) LoggerRegistry.getLogger("tps").log(()-> send_tps_display(server)); @@ -117,7 +122,7 @@ public class HUDController for (ServerPlayerEntity player: targets) { PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(); - ((PlayerListHeaderS2CPacketMixin)packet).setHeader(scarpet_headers.getOrDefault(player, new LiteralText(""))); + ((PlayerListHeaderS2CPacketMixin)packet).setHeader(scarpet_headers.getOrDefault(player.getEntityName(), new LiteralText(""))); ((PlayerListHeaderS2CPacketMixin)packet).setFooter(Messenger.c(player_huds.getOrDefault(player, Collections.emptyList()).toArray(new Object[0]))); player.networkHandler.sendPacket(packet); } diff --git a/src/main/java/carpet/script/annotation/FunctionsTestClass.java b/src/main/java/carpet/script/annotation/FunctionsTestClass.java index 8f81ff6c..d56a3fbc 100644 --- a/src/main/java/carpet/script/annotation/FunctionsTestClass.java +++ b/src/main/java/carpet/script/annotation/FunctionsTestClass.java @@ -42,13 +42,13 @@ public class FunctionsTestClass { } if (action == null) // Player list { - Map map = actionString.equals("player_list_header") ? HUDController.scarpet_headers : HUDController.scarpet_footers; + Map map = actionString.equals("player_list_header") ? HUDController.scarpet_headers : HUDController.scarpet_footers; if (!content.isPresent()) // null for (ServerPlayerEntity p : targets) - map.remove(p); + map.remove(p.getEntityName()); else for (ServerPlayerEntity p : targets) - map.put(p, (BaseText) content.get()); + map.put(p.getEntityName(), (BaseText) content.get()); return targets.size(); } targets.forEach(p -> { diff --git a/src/main/java/carpet/script/api/Auxiliary.java b/src/main/java/carpet/script/api/Auxiliary.java index 343c150a..f59b4584 100644 --- a/src/main/java/carpet/script/api/Auxiliary.java +++ b/src/main/java/carpet/script/api/Auxiliary.java @@ -551,7 +551,7 @@ public class Auxiliary { else title = null; // Will never happen, just to make lambda happy if (action == null) { - Map map; + Map map; if (actionString.equals("player_list_header")) map = HUDController.scarpet_headers; else @@ -561,12 +561,12 @@ public class Auxiliary { List targetList = targets.collect(Collectors.toList()); if (!soundsTrue) // null or empty string targetList.forEach(target -> { - map.remove(target); + map.remove(target.getEntityName()); total.getAndIncrement(); }); else targetList.forEach(target -> { - map.put(target, (BaseText) title); + map.put(target.getEntityName(), (BaseText) title); total.getAndIncrement(); }); HUDController.update_hud(((CarpetContext)c).s.getMinecraftServer(), targetList);