From f5ab7f3102a974821eee1b3105771fdcc3657808 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sun, 19 Jan 2020 02:58:29 -0500 Subject: [PATCH] Smashed the Stupid out of Memory --- .../iris/controller/DebugController.java | 21 --------------- .../iris/controller/PackController.java | 17 ++++++++++-- .../iris/controller/WorldController.java | 27 +++++++++++++++++-- .../iris/generator/genobject/GenObject.java | 5 ++++ .../generator/genobject/GenObjectGroup.java | 11 ++++++++ .../bytecode/iris/pack/CompiledDimension.java | 13 +++++++++ .../bytecode/iris/pack/IrisDimension.java | 5 ++++ 7 files changed, 74 insertions(+), 25 deletions(-) diff --git a/src/main/java/ninja/bytecode/iris/controller/DebugController.java b/src/main/java/ninja/bytecode/iris/controller/DebugController.java index 97c96b9f0..d48885d2b 100644 --- a/src/main/java/ninja/bytecode/iris/controller/DebugController.java +++ b/src/main/java/ninja/bytecode/iris/controller/DebugController.java @@ -1,7 +1,5 @@ package ninja.bytecode.iris.controller; -import java.io.File; - import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -14,7 +12,6 @@ import ninja.bytecode.iris.util.IrisController; import ninja.bytecode.shuriken.collections.GList; import ninja.bytecode.shuriken.collections.GSet; import ninja.bytecode.shuriken.execution.J; -import ninja.bytecode.shuriken.io.IO; public class DebugController implements IrisController { @@ -84,24 +81,6 @@ public class DebugController implements IrisController @Override public void onStop() { - deleteOnExit(new File("iris-worlds")); - } - public static void deleteOnExit(File f) - { - if(f == null || !f.exists()) - { - return; - } - - if(f.isDirectory()) - { - for(File i : f.listFiles()) - { - deleteOnExit(i); - } - } - - f.deleteOnExit(); } } diff --git a/src/main/java/ninja/bytecode/iris/controller/PackController.java b/src/main/java/ninja/bytecode/iris/controller/PackController.java index e1f95230d..01fc7717e 100644 --- a/src/main/java/ninja/bytecode/iris/controller/PackController.java +++ b/src/main/java/ninja/bytecode/iris/controller/PackController.java @@ -18,8 +18,6 @@ import ninja.bytecode.shuriken.bench.PrecisionStopwatch; import ninja.bytecode.shuriken.collections.GList; import ninja.bytecode.shuriken.collections.GMap; import ninja.bytecode.shuriken.execution.J; -import ninja.bytecode.shuriken.execution.TaskExecutor; -import ninja.bytecode.shuriken.execution.TaskExecutor.TaskGroup; import ninja.bytecode.shuriken.format.F; import ninja.bytecode.shuriken.io.IO; import ninja.bytecode.shuriken.json.JSONException; @@ -283,6 +281,21 @@ public class PackController implements IrisController public void dispose() { + for(GenObjectGroup i : genObjectGroups.values()) + { + i.dispose(); + } + + for(IrisDimension i : dimensions.values()) + { + i.dispose(); + } + + for(CompiledDimension i : compiledDimensions.values()) + { + i.dispose(); + } + compiledDimensions.clear(); dimensions.clear(); biomes.clear(); diff --git a/src/main/java/ninja/bytecode/iris/controller/WorldController.java b/src/main/java/ninja/bytecode/iris/controller/WorldController.java index c039b9394..bdfcdf7a8 100644 --- a/src/main/java/ninja/bytecode/iris/controller/WorldController.java +++ b/src/main/java/ninja/bytecode/iris/controller/WorldController.java @@ -1,8 +1,10 @@ package ninja.bytecode.iris.controller; import java.io.File; +import java.io.IOException; import java.util.UUID; +import org.apache.commons.io.FileUtils; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.WorldCreator; @@ -12,15 +14,16 @@ import ninja.bytecode.iris.generator.IrisGenerator; import ninja.bytecode.iris.pack.CompiledDimension; import ninja.bytecode.iris.util.IrisController; import ninja.bytecode.shuriken.execution.J; +import ninja.bytecode.shuriken.io.IO; public class WorldController implements IrisController { @Override public void onStart() { - + } - + public boolean isChunkGenerated(World w, int x, int z) { return w.loadChunk(x, z, false); @@ -52,7 +55,27 @@ public class WorldController implements IrisController if(temp) { + File folder = ww.getWorldFolder(); J.attempt(() -> new File(ww.getWorldFolder(), ".garbage").createNewFile()); + Runtime.getRuntime().addShutdownHook(new Thread() + { + @Override + public void run() + { + IO.delete(folder); + + try + { + FileUtils.forceDelete(folder); + System.out.println("Deleted Debug World: " + folder.getName()); + } + + catch(IOException e) + { + System.out.println("FAILED TO Delete Debug World: " + folder.getName()); + } + } + }); } return ww; diff --git a/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java b/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java index c8a3edf28..af9c327bb 100644 --- a/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java +++ b/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java @@ -468,4 +468,9 @@ public class GenObject recalculateMountShift(); } } + + public void dispose() + { + s.clear(); + } } diff --git a/src/main/java/ninja/bytecode/iris/generator/genobject/GenObjectGroup.java b/src/main/java/ninja/bytecode/iris/generator/genobject/GenObjectGroup.java index 5f57aa3c7..66be7e53a 100644 --- a/src/main/java/ninja/bytecode/iris/generator/genobject/GenObjectGroup.java +++ b/src/main/java/ninja/bytecode/iris/generator/genobject/GenObjectGroup.java @@ -220,4 +220,15 @@ public class GenObjectGroup L.i(ChatColor.LIGHT_PURPLE + "Processed " + ChatColor.WHITE + F.f(schematics.size()) + ChatColor.LIGHT_PURPLE + " Schematics in " + ChatColor.WHITE + name); } + + public void dispose() + { + for(GenObject i : schematics) + { + i.dispose(); + } + + schematics.clear(); + flags.clear(); + } } diff --git a/src/main/java/ninja/bytecode/iris/pack/CompiledDimension.java b/src/main/java/ninja/bytecode/iris/pack/CompiledDimension.java index a3aeea272..d60550940 100644 --- a/src/main/java/ninja/bytecode/iris/pack/CompiledDimension.java +++ b/src/main/java/ninja/bytecode/iris/pack/CompiledDimension.java @@ -169,4 +169,17 @@ public class CompiledDimension return b; } + + public void dispose() + { + biomes.clear(); + biomeCache.clear(); + + for(GenObjectGroup i : objects.values()) + { + i.dispose(); + } + + objects.clear(); + } } diff --git a/src/main/java/ninja/bytecode/iris/pack/IrisDimension.java b/src/main/java/ninja/bytecode/iris/pack/IrisDimension.java index dddb48e3a..3e870ead9 100644 --- a/src/main/java/ninja/bytecode/iris/pack/IrisDimension.java +++ b/src/main/java/ninja/bytecode/iris/pack/IrisDimension.java @@ -104,4 +104,9 @@ public class IrisDimension { return environment; } + + public void dispose() + { + biomes.clear(); + } }