From de2b2ece69862b98035589718d9533d4ff41331b Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:05:02 -0400 Subject: [PATCH] Fix minor memory leaks (#258) * Fix memory leak caused by mob spawner items * Use a weak hash map instead of manually clearing the map * Clear manager reference to prevent holding a WorldClient reference through the GUI * Revert "Use a weak hash map instead of manually clearing the map" This reverts commit 91bb99725081ca34a0ea1fadbc3126fa17194e26. --- src/main/java/codechicken/nei/ClientHandler.java | 6 ++++++ src/main/java/codechicken/nei/ItemMobSpawner.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/codechicken/nei/ClientHandler.java b/src/main/java/codechicken/nei/ClientHandler.java index e8a17444..9b87bc21 100644 --- a/src/main/java/codechicken/nei/ClientHandler.java +++ b/src/main/java/codechicken/nei/ClientHandler.java @@ -299,6 +299,10 @@ public class ClientHandler lastworld = null; else if (gui instanceof GuiSelectWorld) NEIClientConfig.reloadSaves(); + else if(gui == null) { + /* prevent WorldClient reference being held in the Gui */ + NEIController.manager = null; + } } lastGui = gui; } @@ -328,6 +332,8 @@ public class ClientHandler if (!Minecraft.getMinecraft().isSingleplayer())//wait for server to initiate in singleplayer NEIClientConfig.loadWorld("remote/" + ClientUtils.getServerIP().replace(':', '~')); + + ItemMobSpawner.clearEntityReferences(world); } lastworld = world; diff --git a/src/main/java/codechicken/nei/ItemMobSpawner.java b/src/main/java/codechicken/nei/ItemMobSpawner.java index 43ccf406..87f028aa 100644 --- a/src/main/java/codechicken/nei/ItemMobSpawner.java +++ b/src/main/java/codechicken/nei/ItemMobSpawner.java @@ -96,6 +96,10 @@ public class ItemMobSpawner extends ItemBlock return e; } + public static void clearEntityReferences(World newWorld) { + entityHashMap.values().removeIf(e -> e.worldObj != newWorld); + } + private void setDefaultTag(ItemStack itemstack) { if (!IDtoNameMap.containsKey(itemstack.getItemDamage())) itemstack.setItemDamage(idPig);