From 3eef5b2c0209c4ab3ef62e887151f0d81c7ba576 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Sun, 29 Aug 2021 08:06:16 -0400 Subject: [PATCH] Fix loader close bug --- .../volmit/iris/core/commands/CommandStudio.java | 2 +- .../com/volmit/iris/core/loader/IrisData.java | 16 ---------------- .../iris/engine/object/carving/IrisCave.java | 10 ++-------- .../engine/object/carving/IrisCavePlacer.java | 12 +++++++++++- .../iris/engine/object/carving/IrisRavine.java | 12 +++--------- .../engine/object/carving/IrisRavinePlacer.java | 11 ++++++++++- 6 files changed, 27 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java index 12d1782d7..91f3e0eca 100644 --- a/src/main/java/com/volmit/iris/core/commands/CommandStudio.java +++ b/src/main/java/com/volmit/iris/core/commands/CommandStudio.java @@ -692,7 +692,7 @@ public class CommandStudio implements DecreeExecutor { @Param(description = "The dimension to update the workspace of", contextual = true, defaultValue = "overworld") IrisDimension dimension ) { - if (new IrisProject(dimension.getLoadFile().getParentFile().getParentFile()).updateWorkspace()) { + if (new IrisProject(dimension.getLoader().getDataFolder()).updateWorkspace()) { sender().sendMessage(C.GREEN + "Updated Code Workspace for " + dimension.getName()); } else { sender().sendMessage(C.RED + "Invalid project: " + dimension.getName() + ". Try deleting the code-workspace file and try again."); diff --git a/src/main/java/com/volmit/iris/core/loader/IrisData.java b/src/main/java/com/volmit/iris/core/loader/IrisData.java index 616923400..662358455 100644 --- a/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -68,7 +68,6 @@ public class IrisData { private ResourceLoader caveLoader; private ResourceLoader ravineLoader; private KMap, ResourceLoader> loaders = new KMap<>(); - private boolean closed; private final File dataFolder; private Engine engine; private final int id; @@ -81,7 +80,6 @@ public class IrisData { this.engine = null; this.dataFolder = dataFolder; this.id = RNG.r.imax(); - closed = false; hotloaded(); } @@ -156,9 +154,7 @@ public class IrisData { } public void close() { - closed = true; dump(); - loaders.clear(); } private static void printData(ResourceLoader rl) { @@ -193,10 +189,6 @@ public class IrisData { } public synchronized void hotloaded() { - if (closed) { - return; - } - loaders.clear(); File packs = dataFolder; packs.mkdirs(); @@ -220,20 +212,12 @@ public class IrisData { } public void dump() { - if (closed) { - return; - } - for (ResourceLoader i : loaders.values()) { i.clearCache(); } } public void clearLists() { - if (closed) { - return; - } - for (ResourceLoader i : loaders.values()) { i.clearList(); } diff --git a/src/main/java/com/volmit/iris/engine/object/carving/IrisCave.java b/src/main/java/com/volmit/iris/engine/object/carving/IrisCave.java index 903e5b4ee..efcdca02c 100644 --- a/src/main/java/com/volmit/iris/engine/object/carving/IrisCave.java +++ b/src/main/java/com/volmit/iris/engine/object/carving/IrisCave.java @@ -52,15 +52,9 @@ public class IrisCave extends IrisRegistrant { @Desc("Define potential forking features") private IrisCarving fork = new IrisCarving(); - @RegistryListResource(IrisBiome.class) - @Desc("Force this cave to only generate the specified custom biome") - private String customBiome = ""; - @Desc("Limit the worm from ever getting higher or lower than this range") private IrisRange verticalRange = new IrisRange(3, 255); - private transient final AtomicCache matterNodeCache = new AtomicCache<>(); - @Override public String getFolderName() { return "caves"; @@ -71,12 +65,12 @@ public class IrisCave extends IrisRegistrant { return "Cave"; } - public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, MatterCavern biome) { writer.setLine(getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, (at) -> fork.doCarving(writer, rng, engine, at.getX(), at.getY(), at.getZ())), getWorm().getGirth().get(rng, x, z, engine.getData()), true, - matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome()))); + biome); } @Override diff --git a/src/main/java/com/volmit/iris/engine/object/carving/IrisCavePlacer.java b/src/main/java/com/volmit/iris/engine/object/carving/IrisCavePlacer.java index fd183ae4a..28215d139 100644 --- a/src/main/java/com/volmit/iris/engine/object/carving/IrisCavePlacer.java +++ b/src/main/java/com/volmit/iris/engine/object/carving/IrisCavePlacer.java @@ -23,15 +23,19 @@ import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.mantle.MantleWriter; +import com.volmit.iris.engine.modifier.IrisCarveModifier; import com.volmit.iris.engine.object.annotations.Desc; import com.volmit.iris.engine.object.annotations.MinNumber; import com.volmit.iris.engine.object.annotations.RegistryListResource; import com.volmit.iris.engine.object.annotations.Required; +import com.volmit.iris.engine.object.biome.IrisBiome; import com.volmit.iris.engine.object.common.IRare; import com.volmit.iris.engine.object.noise.IrisGeneratorStyle; import com.volmit.iris.engine.object.noise.IrisStyledRange; import com.volmit.iris.engine.object.noise.NoiseStyle; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.MatterCavern; +import com.volmit.iris.util.matter.slices.CavernMatter; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -62,6 +66,11 @@ public class IrisCavePlacer implements IRare { @Desc("The height range this cave can spawn at. If breakSurface is false, the output of this range will be clamped by the current world height to prevent surface breaking.") private IrisStyledRange caveStartHeight = new IrisStyledRange(13, 120, new IrisGeneratorStyle(NoiseStyle.STATIC)); + @RegistryListResource(IrisBiome.class) + @Desc("Force this cave to only generate the specified custom biome") + private String customBiome = ""; + + private transient final AtomicCache matterNodeCache = new AtomicCache<>(); private transient final AtomicCache caveCache = new AtomicCache<>(); private transient final AtomicBoolean fail = new AtomicBoolean(false); @@ -94,7 +103,8 @@ public class IrisCavePlacer implements IRare { } try { - cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15)); + cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15), + matterNodeCache.aquire(() -> customBiome.isEmpty() ? CavernMatter.ON : CavernMatter.get(customBiome))); } catch (Throwable e) { e.printStackTrace(); fail.set(true); diff --git a/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java b/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java index 75e54a666..642e9b0df 100644 --- a/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java +++ b/src/main/java/com/volmit/iris/engine/object/carving/IrisRavine.java @@ -55,10 +55,6 @@ public class IrisRavine extends IrisRegistrant { @Desc("Define the shape of this ravine (2d, ignores Y)") private IrisWorm worm; - @RegistryListResource(IrisBiome.class) - @Desc("Force this cave to only generate the specified custom biome") - private String customBiome = ""; - @Desc("Define potential forking features") private IrisCarving fork = new IrisCarving(); @@ -86,8 +82,6 @@ public class IrisRavine extends IrisRegistrant { @Desc("The thickness of the ravine ribs") private double ribThickness = 3; - private transient final AtomicCache matterNodeCache = new AtomicCache<>(); - @Override public String getFolderName() { return "ravines"; @@ -98,7 +92,7 @@ public class IrisRavine extends IrisRegistrant { return "Ravine"; } - public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { + public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, MatterCavern biome) { KList pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> { }); @@ -129,7 +123,7 @@ public class IrisRavine extends IrisRegistrant { break; } - writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome()))); + writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, biome); } } @@ -145,7 +139,7 @@ public class IrisRavine extends IrisRegistrant { break; } - writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, matterNodeCache.aquire(() -> CavernMatter.get(getCustomBiome()))); + writer.setElipsoid(p.getX(), i, p.getZ(), v, ribThickness, v, true, biome); } } } diff --git a/src/main/java/com/volmit/iris/engine/object/carving/IrisRavinePlacer.java b/src/main/java/com/volmit/iris/engine/object/carving/IrisRavinePlacer.java index 638e658ad..73f5d3143 100644 --- a/src/main/java/com/volmit/iris/engine/object/carving/IrisRavinePlacer.java +++ b/src/main/java/com/volmit/iris/engine/object/carving/IrisRavinePlacer.java @@ -27,8 +27,11 @@ import com.volmit.iris.engine.object.annotations.Desc; import com.volmit.iris.engine.object.annotations.MinNumber; import com.volmit.iris.engine.object.annotations.RegistryListResource; import com.volmit.iris.engine.object.annotations.Required; +import com.volmit.iris.engine.object.biome.IrisBiome; import com.volmit.iris.engine.object.common.IRare; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.MatterCavern; +import com.volmit.iris.util.matter.slices.CavernMatter; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -53,6 +56,11 @@ public class IrisRavinePlacer implements IRare { @RegistryListResource(IrisRavine.class) private String ravine; + @RegistryListResource(IrisBiome.class) + @Desc("Force this cave to only generate the specified custom biome") + private String customBiome = ""; + + private transient final AtomicCache matterNodeCache = new AtomicCache<>(); private transient final AtomicCache ravineCache = new AtomicCache<>(); private transient final AtomicBoolean fail = new AtomicBoolean(false); @@ -81,7 +89,8 @@ public class IrisRavinePlacer implements IRare { try { int xx = x + rng.nextInt(15); int zz = z + rng.nextInt(15); - ravine.generate(mantle, rng, engine, xx, y, zz); + ravine.generate(mantle, rng, engine, xx, y, zz, + matterNodeCache.aquire(() -> customBiome.isEmpty() ? CavernMatter.ON : CavernMatter.get(customBiome))); } catch (Throwable e) { e.printStackTrace(); fail.set(true);