From b5811cae08c65f7360d73214adddffb856f7340b Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 20 Sep 2025 23:04:11 +0200 Subject: [PATCH] cleanup IrisData usage --- core/src/main/java/com/volmit/iris/Iris.java | 4 +- .../com/volmit/iris/core/loader/IrisData.java | 106 +++++++++++------- .../volmit/iris/core/project/IrisProject.java | 4 +- .../volmit/iris/core/service/StudioSVC.java | 6 +- .../iris/core/tools/IrisWorldCreator.java | 4 +- .../iris/engine/object/IrisDimension.java | 2 +- .../volmit/iris/engine/object/IrisRegion.java | 2 +- .../engine/platform/BukkitChunkGenerator.java | 2 +- 8 files changed, 76 insertions(+), 54 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 615d40d89..f95557d2f 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -719,11 +719,11 @@ public class Iris extends VolmitPlugin implements Listener { public static IrisDimension loadDimension(@NonNull String worldName, @NonNull String id) { var data = IrisData.get(new File(Bukkit.getWorldContainer(), String.join(File.separator, worldName, "iris", "pack"))); var dimension = data.getDimensionLoader().load(id); - if (dimension == null) dimension = IrisData.loadAnyDimension(id); + if (dimension == null) dimension = IrisData.loadAnyDimension(id, null); if (dimension == null) { Iris.warn("Unable to find dimension type " + id + " Looking for online packs..."); Iris.service(StudioSVC.class).downloadSearch(new VolmitSender(Bukkit.getConsoleSender()), id, false); - dimension = IrisData.loadAnyDimension(id); + dimension = IrisData.loadAnyDimension(id, null); if (dimension != null) { Iris.info("Resolved missing dimension, proceeding."); diff --git a/core/src/main/java/com/volmit/iris/core/loader/IrisData.java b/core/src/main/java/com/volmit/iris/core/loader/IrisData.java index 9ad5e12ea..58605c949 100644 --- a/core/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/core/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -43,6 +43,7 @@ import com.volmit.iris.util.reflect.KeyedType; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; import lombok.Data; +import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileReader; @@ -50,7 +51,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Objects; -import java.util.function.Function; @Data public class IrisData implements ExclusionStrategy, TypeAdapterFactory { @@ -118,92 +118,100 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().getSize() + " Folders=" + rl.getFolders().size()); } - public static IrisObject loadAnyObject(String key) { - return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false)); + public static IrisObject loadAnyObject(String key, @Nullable IrisData nearest) { + return loadAny(IrisObject.class, key, nearest); } - public static IrisMatterObject loadAnyMatter(String key) { - return loadAny(key, (dm) -> dm.getMatterLoader().load(key, false)); + public static IrisMatterObject loadAnyMatter(String key, @Nullable IrisData nearest) { + return loadAny(IrisMatterObject.class, key, nearest); } - public static IrisBiome loadAnyBiome(String key) { - return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false)); + public static IrisBiome loadAnyBiome(String key, @Nullable IrisData nearest) { + return loadAny(IrisBiome.class, key, nearest); } - public static IrisExpression loadAnyExpression(String key) { - return loadAny(key, (dm) -> dm.getExpressionLoader().load(key, false)); + public static IrisExpression loadAnyExpression(String key, @Nullable IrisData nearest) { + return loadAny(IrisExpression.class, key, nearest); } - public static IrisMod loadAnyMod(String key) { - return loadAny(key, (dm) -> dm.getModLoader().load(key, false)); + public static IrisMod loadAnyMod(String key, @Nullable IrisData nearest) { + return loadAny(IrisMod.class, key, nearest); } - public static IrisJigsawPiece loadAnyJigsawPiece(String key) { - return loadAny(key, (dm) -> dm.getJigsawPieceLoader().load(key, false)); + public static IrisJigsawPiece loadAnyJigsawPiece(String key, @Nullable IrisData nearest) { + return loadAny(IrisJigsawPiece.class, key, nearest); } - public static IrisJigsawPool loadAnyJigsawPool(String key) { - return loadAny(key, (dm) -> dm.getJigsawPoolLoader().load(key, false)); + public static IrisJigsawPool loadAnyJigsawPool(String key, @Nullable IrisData nearest) { + return loadAny(IrisJigsawPool.class, key, nearest); } - public static IrisEntity loadAnyEntity(String key) { - return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false)); + public static IrisEntity loadAnyEntity(String key, @Nullable IrisData nearest) { + return loadAny(IrisEntity.class, key, nearest); } - public static IrisLootTable loadAnyLootTable(String key) { - return loadAny(key, (dm) -> dm.getLootLoader().load(key, false)); + public static IrisLootTable loadAnyLootTable(String key, @Nullable IrisData nearest) { + return loadAny(IrisLootTable.class, key, nearest); } - public static IrisBlockData loadAnyBlock(String key) { - return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false)); + public static IrisBlockData loadAnyBlock(String key, @Nullable IrisData nearest) { + return loadAny(IrisBlockData.class, key, nearest); } - public static IrisSpawner loadAnySpaner(String key) { - return loadAny(key, (dm) -> dm.getSpawnerLoader().load(key, false)); + public static IrisSpawner loadAnySpaner(String key, @Nullable IrisData nearest) { + return loadAny(IrisSpawner.class, key, nearest); } - public static IrisScript loadAnyScript(String key) { - return loadAny(key, (dm) -> dm.getScriptLoader().load(key, false)); + public static IrisScript loadAnyScript(String key, @Nullable IrisData nearest) { + return loadAny(IrisScript.class, key, nearest); } - public static IrisRavine loadAnyRavine(String key) { - return loadAny(key, (dm) -> dm.getRavineLoader().load(key, false)); + public static IrisRavine loadAnyRavine(String key, @Nullable IrisData nearest) { + return loadAny(IrisRavine.class, key, nearest); } - public static IrisRegion loadAnyRegion(String key) { - return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false)); + public static IrisRegion loadAnyRegion(String key, @Nullable IrisData nearest) { + return loadAny(IrisRegion.class, key, nearest); } - public static IrisMarker loadAnyMarker(String key) { - return loadAny(key, (dm) -> dm.getMarkerLoader().load(key, false)); + public static IrisMarker loadAnyMarker(String key, @Nullable IrisData nearest) { + return loadAny(IrisMarker.class, key, nearest); } - public static IrisCave loadAnyCave(String key) { - return loadAny(key, (dm) -> dm.getCaveLoader().load(key, false)); + public static IrisCave loadAnyCave(String key, @Nullable IrisData nearest) { + return loadAny(IrisCave.class, key, nearest); } - public static IrisImage loadAnyImage(String key) { - return loadAny(key, (dm) -> dm.getImageLoader().load(key, false)); + public static IrisImage loadAnyImage(String key, @Nullable IrisData nearest) { + return loadAny(IrisImage.class, key, nearest); } - public static IrisDimension loadAnyDimension(String key) { - return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false)); + public static IrisDimension loadAnyDimension(String key, @Nullable IrisData nearest) { + return loadAny(IrisDimension.class, key, nearest); } - public static IrisJigsawStructure loadAnyJigsawStructure(String key) { - return loadAny(key, (dm) -> dm.getJigsawStructureLoader().load(key, false)); + public static IrisJigsawStructure loadAnyJigsawStructure(String key, @Nullable IrisData nearest) { + return loadAny(IrisJigsawStructure.class, key, nearest); } - public static IrisGenerator loadAnyGenerator(String key) { - return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false)); + public static IrisGenerator loadAnyGenerator(String key, @Nullable IrisData nearest) { + return loadAny(IrisGenerator.class, key, nearest); } - public static T loadAny(String key, Function v) { + public static T loadAny(Class type, String key, @Nullable IrisData nearest) { try { + if (nearest != null) { + T t = nearest.load(type, key, false); + if (t != null) { + return t; + } + } + for (File i : Objects.requireNonNull(Iris.instance.getDataFolder("packs").listFiles())) { if (i.isDirectory()) { IrisData dm = get(i); - T t = v.apply(dm); + if (dm == nearest) continue; + T t = dm.load(type, key, false); if (t != null) { return t; @@ -218,6 +226,17 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { return null; } + public T load(Class type, String key, boolean warn) { + var loader = getLoader(type); + if (loader == null) return null; + return loader.load(key, warn); + } + + @SuppressWarnings("unchecked") + public ResourceLoader getLoader(Class type) { + return (ResourceLoader) loaders.get(type); + } + public ResourceLoader getTypedLoaderFor(File f) { String[] k = f.getPath().split("\\Q" + File.separator + "\\E"); @@ -325,6 +344,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { } public synchronized void hotloaded() { + closed = false; environment.close(); possibleSnippets = new KMap<>(); builder = new GsonBuilder() diff --git a/core/src/main/java/com/volmit/iris/core/project/IrisProject.java b/core/src/main/java/com/volmit/iris/core/project/IrisProject.java index 716173bd6..ad5a42bff 100644 --- a/core/src/main/java/com/volmit/iris/core/project/IrisProject.java +++ b/core/src/main/java/com/volmit/iris/core/project/IrisProject.java @@ -159,7 +159,7 @@ public class IrisProject { public void openVSCode(VolmitSender sender) { - IrisDimension d = IrisData.loadAnyDimension(getName()); + IrisDimension d = IrisData.loadAnyDimension(getName(), null); J.attemptAsync(() -> { try { @@ -221,7 +221,7 @@ public class IrisProject { } J.a(() -> { - IrisDimension d = IrisData.loadAnyDimension(getName()); + IrisDimension d = IrisData.loadAnyDimension(getName(), null); if (d == null) { sender.sendMessage("Can't find dimension: " + getName()); return; diff --git a/core/src/main/java/com/volmit/iris/core/service/StudioSVC.java b/core/src/main/java/com/volmit/iris/core/service/StudioSVC.java index 0b0b40717..3d5c36a30 100644 --- a/core/src/main/java/com/volmit/iris/core/service/StudioSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/StudioSVC.java @@ -93,7 +93,7 @@ public class StudioSVC implements IrisService { public IrisDimension installInto(VolmitSender sender, String type, File folder) { sender.sendMessage("Looking for Package: " + type); - IrisDimension dim = IrisData.loadAnyDimension(type); + IrisDimension dim = IrisData.loadAnyDimension(type, null); if (dim == null) { for (File i : getWorkspaceFolder().listFiles()) { @@ -265,6 +265,7 @@ public class StudioSVC implements IrisService { } IrisDimension d = data.getDimensionLoader().load(dimensions[0]); + data.close(); if (d == null) { sender.sendMessage("Invalid dimension (folder) in dimensions folder"); @@ -279,7 +280,7 @@ public class StudioSVC implements IrisService { IO.delete(packEntry); } - if (IrisData.loadAnyDimension(key) != null) { + if (IrisData.loadAnyDimension(key, null) != null) { sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!"); return; } @@ -298,6 +299,7 @@ public class StudioSVC implements IrisService { packEntry.mkdirs(); ZipUtil.unpack(cp, packEntry); } + IrisData.get(packEntry).hotloaded(); sender.sendMessage("Successfully Aquired " + d.getName()); ServerConfigurator.installDataPacks(true); diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisWorldCreator.java b/core/src/main/java/com/volmit/iris/core/tools/IrisWorldCreator.java index b63b77056..a6fd79a83 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisWorldCreator.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisWorldCreator.java @@ -64,7 +64,7 @@ public class IrisWorldCreator { } public WorldCreator create() { - IrisDimension dim = IrisData.loadAnyDimension(dimensionName); + IrisDimension dim = IrisData.loadAnyDimension(dimensionName, null); IrisWorld w = IrisWorld.builder() .name(name) @@ -86,7 +86,7 @@ public class IrisWorldCreator { } private World.Environment findEnvironment() { - IrisDimension dim = IrisData.loadAnyDimension(dimensionName); + IrisDimension dim = IrisData.loadAnyDimension(dimensionName, null); if (dim == null || dim.getEnvironment() == null) { return World.Environment.NORMAL; } else { diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index 2d7917a6d..a9daa6fef 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -355,7 +355,7 @@ public class IrisDimension extends IrisRegistrant { KList r = new KList<>(); for (String i : getRegions()) { - r.add(IrisData.loadAnyRegion(i)); + r.add(IrisData.loadAnyRegion(i, getLoader())); } return r; diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisRegion.java b/core/src/main/java/com/volmit/iris/engine/object/IrisRegion.java index a2712786a..157cb61c9 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisRegion.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisRegion.java @@ -346,7 +346,7 @@ public class IrisRegion extends IrisRegistrant implements IRare { continue; } - IrisBiome biome = IrisData.loadAnyBiome(i); + IrisBiome biome = IrisData.loadAnyBiome(i, getLoader()); names.remove(i); if (biome == null) { diff --git a/core/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java b/core/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java index 0be74eef8..c16bebc3a 100644 --- a/core/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/core/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -170,7 +170,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun if (dimension == null) { Iris.error("Oh No! There's no pack in " + data.getDataFolder().getPath() + " or... there's no dimension for the key " + dimensionKey); - IrisDimension test = IrisData.loadAnyDimension(dimensionKey); + IrisDimension test = IrisData.loadAnyDimension(dimensionKey, null); if (test != null) { Iris.warn("Looks like " + dimensionKey + " exists in " + test.getLoadFile().getPath() + " ");