removes retained player references, Fixes #953

This commit is contained in:
gnembon committed 2021-06-25 22:44:01 -03:00
1 parent 448fde1f36
commit 096e62b865
3 files changed
+15 -10

No files matched your search

@@ -43,9 +43,10 @@ public class HUDController
public static Map<ServerPlayerEntity, List<BaseText>> player_huds = new HashMap<>(); public static Map<ServerPlayerEntity, List<BaseText>> player_huds = new HashMap<>();
public static final Map<ServerPlayerEntity, BaseText> scarpet_headers = new HashMap<>(); //keyed with player names so unlogged players don't hold the reference
public static final Map<String, BaseText> scarpet_headers = new HashMap<>();
public static final Map<ServerPlayerEntity, BaseText> scarpet_footers = new HashMap<>(); public static final Map<String, BaseText> scarpet_footers = new HashMap<>();
public static void resetScarpetHUDs() { public static void resetScarpetHUDs() {
scarpet_headers.clear(); scarpet_headers.clear();
@@ -54,6 +55,7 @@ public class HUDController
public static void addMessage(ServerPlayerEntity player, BaseText hudMessage) public static void addMessage(ServerPlayerEntity player, BaseText hudMessage)
{ {
if (player == null) return;
if (!player_huds.containsKey(player)) if (!player_huds.containsKey(player))
{ {
player_huds.put(player, new ArrayList<>()); player_huds.put(player, new ArrayList<>());
@@ -80,7 +82,10 @@ public class HUDController
player_huds.clear(); 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) if (LoggerRegistry.__tps)
LoggerRegistry.getLogger("tps").log(()-> send_tps_display(server)); LoggerRegistry.getLogger("tps").log(()-> send_tps_display(server));
@@ -117,7 +122,7 @@ public class HUDController
for (ServerPlayerEntity player: targets) for (ServerPlayerEntity player: targets)
{ {
PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(); 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]))); ((PlayerListHeaderS2CPacketMixin)packet).setFooter(Messenger.c(player_huds.getOrDefault(player, Collections.emptyList()).toArray(new Object[0])));
player.networkHandler.sendPacket(packet); player.networkHandler.sendPacket(packet);
} }
@@ -42,13 +42,13 @@ public class FunctionsTestClass {
} }
if (action == null) // Player list if (action == null) // Player list
{ {
Map<ServerPlayerEntity, BaseText> map = actionString.equals("player_list_header") ? HUDController.scarpet_headers : HUDController.scarpet_footers; Map<String, BaseText> map = actionString.equals("player_list_header") ? HUDController.scarpet_headers : HUDController.scarpet_footers;
if (!content.isPresent()) // null if (!content.isPresent()) // null
for (ServerPlayerEntity p : targets) for (ServerPlayerEntity p : targets)
map.remove(p); map.remove(p.getEntityName());
else else
for (ServerPlayerEntity p : targets) for (ServerPlayerEntity p : targets)
map.put(p, (BaseText) content.get()); map.put(p.getEntityName(), (BaseText) content.get());
return targets.size(); return targets.size();
} }
targets.forEach(p -> { targets.forEach(p -> {
@@ -551,7 +551,7 @@ public class Auxiliary {
else title = null; // Will never happen, just to make lambda happy else title = null; // Will never happen, just to make lambda happy
if (action == null) if (action == null)
{ {
Map<ServerPlayerEntity, BaseText> map; Map<String, BaseText> map;
if (actionString.equals("player_list_header")) if (actionString.equals("player_list_header"))
map = HUDController.scarpet_headers; map = HUDController.scarpet_headers;
else else
@@ -561,12 +561,12 @@ public class Auxiliary {
List<ServerPlayerEntity> targetList = targets.collect(Collectors.toList()); List<ServerPlayerEntity> targetList = targets.collect(Collectors.toList());
if (!soundsTrue) // null or empty string if (!soundsTrue) // null or empty string
targetList.forEach(target -> { targetList.forEach(target -> {
map.remove(target); map.remove(target.getEntityName());
total.getAndIncrement(); total.getAndIncrement();
}); });
else else
targetList.forEach(target -> { targetList.forEach(target -> {
map.put(target, (BaseText) title); map.put(target.getEntityName(), (BaseText) title);
total.getAndIncrement(); total.getAndIncrement();
}); });
HUDController.update_hud(((CarpetContext)c).s.getMinecraftServer(), targetList); HUDController.update_hud(((CarpetContext)c).s.getMinecraftServer(), targetList);