From 1bc99b9c553990d7e56fba62e601d043e69f2da8 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 8 Aug 2014 19:57:03 +1000 Subject: [PATCH] Plug WorldMap Memory Leak diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java index cc5c8c925..49392b649 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1843,6 +1843,29 @@ public class WorldServer extends World implements GeneratorAccessSeed { public void a(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot + // Spigot start + if ( entity instanceof EntityHuman ) + { + getMinecraftServer().levels.values().stream().map( WorldServer::getWorldPersistentData ).forEach( (worldData) -> + { + for (Object o : worldData.cache.values() ) + { + if ( o instanceof WorldMap ) + { + WorldMap map = (WorldMap) o; + map.carriedByPlayers.remove( (EntityHuman) entity ); + for ( Iterator iter = (Iterator) map.carriedBy.iterator(); iter.hasNext(); ) + { + if ( iter.next().player == entity ) + { + iter.remove(); + } + } + } + } + } ); + } + // Spigot end // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder) { for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((org.bukkit.inventory.InventoryHolder) entity.getBukkitEntity()).getInventory().getViewers())) { -- 2.25.1