From 84e758e450e9fe8b9df23f3495fda55e014a6f02 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Wed, 19 Oct 2022 14:31:55 +0800 Subject: [PATCH] fix memory leak in ManaNetworkHandler --- .../core/handler/ManaNetworkHandler.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/vazkii/botania/common/core/handler/ManaNetworkHandler.java b/src/main/java/vazkii/botania/common/core/handler/ManaNetworkHandler.java index 54608e1c4..612d23326 100644 --- a/src/main/java/vazkii/botania/common/core/handler/ManaNetworkHandler.java +++ b/src/main/java/vazkii/botania/common/core/handler/ManaNetworkHandler.java @@ -18,6 +18,7 @@ import java.util.WeakHashMap; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraft.world.World; +import net.minecraftforge.event.world.WorldEvent; import vazkii.botania.api.internal.IManaNetwork; import vazkii.botania.api.mana.ManaNetworkEvent; import vazkii.botania.api.mana.ManaNetworkEvent.Action; @@ -30,8 +31,8 @@ public final class ManaNetworkHandler implements IManaNetwork { public static final ManaNetworkHandler instance = new ManaNetworkHandler(); - public WeakHashMap> manaPools = new WeakHashMap(); - public WeakHashMap> manaCollectors = new WeakHashMap(); + public WeakHashMap> manaPools = new WeakHashMap<>(); + public WeakHashMap> manaCollectors = new WeakHashMap<>(); @SubscribeEvent public void onNetworkEvent(ManaNetworkEvent event) { @@ -124,11 +125,11 @@ public final class ManaNetworkHandler implements IManaNetwork { List tiles; if(!map.containsKey(world)) - map.put(world, new ArrayList()); + map.put(world, new ArrayList<>()); tiles = map.get(world); - if(!tiles.contains(tile)) + if(tiles.stream().noneMatch(s -> s.tile == tile)) tiles.add(new TileSignature(tile, tile.getWorldObj().isRemote)); } @@ -144,10 +145,15 @@ public final class ManaNetworkHandler implements IManaNetwork { private List getAllInWorld(Map> map, World world) { if(!map.containsKey(world)) - return new ArrayList(); + return new ArrayList<>(); return map.get(world); } - + @SubscribeEvent + public void onWorldRemoved(WorldEvent.Unload e) { + World world = e.world; + manaPools.remove(world); + manaCollectors.remove(world); + } }