From eb80ae62b16261726e3c6dd13e0ad88e652bb8b1 Mon Sep 17 00:00:00 2001 From: RePixelatedMC Date: Fri, 1 Nov 2024 20:47:19 +0100 Subject: [PATCH] Fix mem leak and further improvements --- build.gradle | 2 +- .../com/volmit/iris/engine/IrisEngine.java | 2 +- .../volmit/iris/engine/object/IrisMerger.java | 31 ++++++++++++++----- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 4ef4454aa..7f4c4956c 100644 --- a/build.gradle +++ b/build.gradle @@ -53,7 +53,7 @@ registerCustomOutputTaskUnix('CrazyDev22LT', '/home/julian/Desktop/server/plugin // ============================================================== def NMS_BINDINGS = Map.of( - "v1_21_R1", "1.21-R0.1-SNAPSHOT", + "v1_21_R1", "1.21.1-R0.1-SNAPSHOT", "v1_20_R4", "1.20.6-R0.1-SNAPSHOT", "v1_20_R3", "1.20.4-R0.1-SNAPSHOT", "v1_20_R2", "1.20.2-R0.1-SNAPSHOT", diff --git a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java index 9280c0511..d4deb5a11 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -203,7 +203,7 @@ public class IrisEngine implements Engine { private void updateMemoryWorld() { try { - if(!merger.isUseGenerator() || merger.getGenerator().isEmpty()) + if(!merger.isUseMemoryWorld() || merger.getGenerator().isEmpty()) return; merger = getDimension().getMerger(); if (!getDimension().isEnableExperimentalMerger()) return; diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisMerger.java b/core/src/main/java/com/volmit/iris/engine/object/IrisMerger.java index f4978cbd4..d3867e3ea 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisMerger.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisMerger.java @@ -5,7 +5,6 @@ import com.volmit.iris.core.nms.IMemoryWorld; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.annotations.Desc; -import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.context.ChunkedDataCache; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.hunk.Hunk; @@ -46,7 +45,10 @@ public class IrisMerger { private String generator; @Desc("Use Generator") - private boolean useGenerator = false; + private boolean useMemoryWorld = false; + + @Desc("Allows to gen chunks on the mergers world") + private boolean allowGenChunks = false; @Desc("Uses a world instead of a generator") private String world; @@ -69,7 +71,6 @@ public class IrisMerger { @Desc("If it should translate iris deposits/ores to their deepslate variant") private boolean deepslateTranslator = true; - // Map to keep track of last use time for chunks private final Map lastUse = new ConcurrentHashMap<>(); /** @@ -77,11 +78,16 @@ public class IrisMerger { */ @Deprecated public void generateVanillaUnderground(int cx, int cz, Chunk ichunk, Engine engine) { - if (engine.getMemoryWorld() == null && useGenerator) + if (engine.getMemoryWorld() == null && useMemoryWorld) throw new IllegalStateException("MemoryWorld is null. Ensure that it has been initialized."); if (engine.getWorld().realWorld() == null) return; + if (world == null) { + Iris.error("World merger is null! cant generate chunks FALLBACK!"); + return; + } + try { PrecisionStopwatch p = PrecisionStopwatch.start(); @@ -99,10 +105,17 @@ public class IrisMerger { } } - Chunk chunk = bukkit.getChunkAt(cx, cz); - lastUse.put(chunk, System.currentTimeMillis()); + Chunk chunk; + if (allowGenChunks) { + chunk = bukkit.getChunkAt(cx, cz, true); + } else { + chunk = bukkit.getChunkAt(cx, cz, false); + if (!chunk.isGenerated()) { + throw new IllegalStateException("Chunk " + cx + ", " + cz + " not found. OUT OF BOUNDS"); + } + } -// Chunk ichunk = engine.getWorld().realWorld().getChunkAt(cx, cz); +// Chunk ichunk = engine.getWorld().realWorld().getChunkAt(cx, cz); if (!chunk.isLoaded()) J.s(chunk::load); @@ -202,6 +215,7 @@ public class IrisMerger { } } } + lastUse.put(chunk, System.currentTimeMillis()); mergeDuration.put(p.getMilliseconds()); Iris.info("Vanilla merge average in: " + Form.duration(mergeDuration.getAverage(), 8)); } catch (Exception e) { @@ -325,7 +339,8 @@ public class IrisMerger { World bukkitWorld = Bukkit.getWorld(world); if (!new File(Bukkit.getWorldContainer(), world).exists()) - throw new IllegalStateException("World does not exist!"); + Iris.warn("World does not exist disabled merger generation for: " + engine.getWorld().name()); + //throw new IllegalStateException("World does not exist!"); if (bukkitWorld == null) { Iris.info("World " + world + " is not loaded yet, creating it.");