diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 0f64988b5..03ebb275f 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -31,7 +31,6 @@ public class Iris extends VolmitPlugin { public static KList executors = new KList<>(); public static Iris instance; - public static IrisDataManager globaldata; public static ProjectManager proj; public static ConversionManager convert; public static IrisHotloadManager hotloader; @@ -154,7 +153,6 @@ public class Iris extends VolmitPlugin proj = new ProjectManager(); hotloader = new IrisHotloadManager(); convert = new ConversionManager(); - globaldata = new IrisDataManager(getDataFolder()); wand = new WandManager(); struct = new StructureManager(); board = new IrisBoardManager(); @@ -194,6 +192,7 @@ public class Iris extends VolmitPlugin board.disable(); Bukkit.getScheduler().cancelTasks(this); HandlerList.unregisterAll((Plugin) this); + IrisDataManager.managers.clear(); super.onDisable(); } diff --git a/src/main/java/com/volmit/iris/generator/IrisEngine.java b/src/main/java/com/volmit/iris/generator/IrisEngine.java index 9fd2683e6..97726dd33 100644 --- a/src/main/java/com/volmit/iris/generator/IrisEngine.java +++ b/src/main/java/com/volmit/iris/generator/IrisEngine.java @@ -80,26 +80,33 @@ public class IrisEngine extends BlockPopulator implements Engine @Override public void generate(int x, int z, Hunk vblocks, Hunk vbiomes) { - Hunk biomes = vbiomes; - Hunk blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t)); + try + { + Hunk biomes = vbiomes; + Hunk blocks = vblocks.synchronize().listen((xx,y,zz,t) -> catchBlockUpdates(x+xx,y+getMinHeight(),z+zz, t)); - MultiBurst.burst.burst( - () -> getFramework().getEngineParallax().generateParallaxArea(x, z), - () -> getFramework().getBiomeActuator().actuate(x, z, biomes), - () -> getFramework().getTerrainActuator().actuate(x, z, blocks) - ); - MultiBurst.burst.burst( - () -> getFramework().getCaveModifier().modify(x, z, blocks), - () -> getFramework().getRavineModifier().modify(x, z, blocks) - ); - MultiBurst.burst.burst( - () -> getFramework().getDecorantActuator().actuate(x, z, blocks), - () -> getFramework().getDepositModifier().modify(x, z, blocks), - () -> getFramework().getPostModifier().modify(x, z, blocks), - () -> getFramework().getEngineParallax().insertParallax(x, z, blocks) - ); + MultiBurst.burst.burst( + () -> getFramework().getEngineParallax().generateParallaxArea(x, z), + () -> getFramework().getBiomeActuator().actuate(x, z, biomes), + () -> getFramework().getTerrainActuator().actuate(x, z, blocks) + ); + MultiBurst.burst.burst( + () -> getFramework().getCaveModifier().modify(x, z, blocks), + () -> getFramework().getRavineModifier().modify(x, z, blocks) + ); + MultiBurst.burst.burst( + () -> getFramework().getDecorantActuator().actuate(x, z, blocks), + () -> getFramework().getDepositModifier().modify(x, z, blocks), + () -> getFramework().getPostModifier().modify(x, z, blocks), + () -> getFramework().getEngineParallax().insertParallax(x, z, blocks) + ); - getFramework().recycle(); + getFramework().recycle(); + } + catch(Throwable e) + { + fail("Failed to generate " + x + ", " + z, e); + } } @Override diff --git a/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java b/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java index b361decae..3b82e4efe 100644 --- a/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java +++ b/src/main/java/com/volmit/iris/generator/IrisEngineCompound.java @@ -51,6 +51,8 @@ public class IrisEngineCompound implements EngineCompound { Iris.info("Initializing Engine Composite for " + world.getName()); this.world = world; engineMetadata = EngineData.load(getEngineMetadataFile()); + engineMetadata.setDimension(rootDimension.getLoadKey()); + engineMetadata.setLastVersion(Iris.instance.getDescription().getVersion()); saveEngineMetadata(); populators = new KList<>(); @@ -83,7 +85,7 @@ public class IrisEngineCompound implements EngineCompound { { IrisDimensionIndex index = rootDimension.getDimensionalComposite().get(i); IrisDimension dimension = data.getDimensionLoader().load(index.getDimension()); - engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy().preferFolder(rootDimension.getLoadKey()), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i); + engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy(), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist), this, i); engines[i].setMinHeight(buf); buf += engines[i].getHeight(); } diff --git a/src/main/java/com/volmit/iris/manager/IrisDataManager.java b/src/main/java/com/volmit/iris/manager/IrisDataManager.java index 61c8ed6df..2b8259cf8 100644 --- a/src/main/java/com/volmit/iris/manager/IrisDataManager.java +++ b/src/main/java/com/volmit/iris/manager/IrisDataManager.java @@ -1,35 +1,20 @@ package com.volmit.iris.manager; -import java.io.File; - -import org.bukkit.World.Environment; -import org.bukkit.block.Biome; - -import com.google.gson.Gson; -import com.volmit.iris.object.IrisBiome; -import com.volmit.iris.object.IrisDecorator; -import com.volmit.iris.object.IrisBlockData; -import com.volmit.iris.object.IrisDimension; -import com.volmit.iris.object.IrisEntity; -import com.volmit.iris.object.IrisGenerator; -import com.volmit.iris.object.IrisLootTable; -import com.volmit.iris.object.IrisNoiseGenerator; -import com.volmit.iris.object.IrisObjectPlacement; -import com.volmit.iris.object.IrisRegion; -import com.volmit.iris.object.IrisStructure; -import com.volmit.iris.util.IO; -import com.volmit.iris.util.JSONObject; +import com.volmit.iris.Iris; +import com.volmit.iris.object.*; +import com.volmit.iris.util.KMap; import com.volmit.iris.util.ObjectResourceLoader; +import com.volmit.iris.util.RNG; import com.volmit.iris.util.ResourceLoader; - import lombok.Data; +import java.io.File; +import java.util.function.Function; + @Data public class IrisDataManager { - private File dataFolder; - private File packs; - private boolean prod; + public static final KMap managers = new KMap<>(); private ResourceLoader biomeLoader; private ResourceLoader lootLoader; private ResourceLoader regionLoader; @@ -39,34 +24,64 @@ public class IrisDataManager private ResourceLoader entityLoader; private ResourceLoader blockLoader; private ObjectResourceLoader objectLoader; + private boolean closed; + private final File dataFolder; + private final int id; public IrisDataManager(File dataFolder) { this(dataFolder, false); } - public IrisDataManager(File dataFolder, boolean v2) + public IrisDataManager(File dataFolder, boolean oneshot) { this.dataFolder = dataFolder; - this.packs = new File(dataFolder, ProjectManager.WORKSPACE_NAME); - boolean pr = false; - if(!packs.exists()) - { - if(v2) - { - pr = true; - packs = new File(dataFolder, "iris/pack"); - } - - else if(new File(dataFolder, "iris").exists()) - { - pr = true; - packs = new File(dataFolder, "iris"); - } - } - + this.id = RNG.r.imax(); + closed = false; hotloaded(); - prod = pr; + + if(!oneshot) + { + managers.put(id, this); + } + } + + public void close() + { + closed = true; + managers.remove(id); + dump(); + this.lootLoader = null; + this.entityLoader = null; + this.regionLoader = null; + this.biomeLoader = null; + this.dimensionLoader = null; + this.structureLoader = null; + this.generatorLoader = null; + this.blockLoader = null; + this.objectLoader = null; + } + + public static void dumpManagers() + { + for(IrisDataManager i : managers.v()) + { + Iris.warn(i.getId() + " @ " + i.getDataFolder().getAbsolutePath()); + printData(i.lootLoader); + printData(i.entityLoader); + printData(i.regionLoader); + printData(i.biomeLoader); + printData(i.dimensionLoader); + printData(i.structureLoader); + printData(i.generatorLoader); + printData(i.blockLoader); + printData(i.objectLoader); + } + } + + private static void printData(ResourceLoader rl) + { + Iris.warn(" " + rl.getResourceTypeName() + " @ /" + rl.getFolderName() + ": Cache=" + rl.getLoadCache().size() + " Folders=" + rl.getFolders().size()); } public IrisDataManager copy() { @@ -75,34 +90,34 @@ public class IrisDataManager public void hotloaded() { - if(prod) + if(closed) { return; } - File packs = this.packs.getName().equals(ProjectManager.WORKSPACE_NAME) ? this.packs : dataFolder; + File packs = dataFolder; packs.mkdirs(); - this.lootLoader = new ResourceLoader<>(packs, "loot", "Loot", IrisLootTable.class); - this.entityLoader = new ResourceLoader<>(packs, "entities", "Entity", IrisEntity.class); - this.regionLoader = new ResourceLoader<>(packs, "regions", "Region", IrisRegion.class); - this.biomeLoader = new ResourceLoader<>(packs, "biomes", "Biome", IrisBiome.class); - this.dimensionLoader = new ResourceLoader<>(packs, "dimensions", "Dimension", IrisDimension.class); - this.structureLoader = new ResourceLoader<>(packs, "structures", "Structure", IrisStructure.class); - this.generatorLoader = new ResourceLoader<>(packs, "generators", "Generator", IrisGenerator.class); - this.blockLoader = new ResourceLoader<>(packs, "blocks", "Block", IrisBlockData.class); - this.objectLoader = new ObjectResourceLoader(packs, "objects", "Object"); - - if(packs.getName().equals(ProjectManager.WORKSPACE_NAME)) - { - writeExamples(); - } + this.lootLoader = new ResourceLoader<>(packs, this, "loot", "Loot", IrisLootTable.class); + this.entityLoader = new ResourceLoader<>(packs,this, "entities", "Entity", IrisEntity.class); + this.regionLoader = new ResourceLoader<>(packs, this, "regions", "Region", IrisRegion.class); + this.biomeLoader = new ResourceLoader<>(packs, this, "biomes", "Biome", IrisBiome.class); + this.dimensionLoader = new ResourceLoader<>(packs, this, "dimensions", "Dimension", IrisDimension.class); + this.structureLoader = new ResourceLoader<>(packs, this, "structures", "Structure", IrisStructure.class); + this.generatorLoader = new ResourceLoader<>(packs, this, "generators", "Generator", IrisGenerator.class); + this.blockLoader = new ResourceLoader<>(packs,this, "blocks", "Block", IrisBlockData.class); + this.objectLoader = new ObjectResourceLoader(packs, this, "objects", "Object"); } public void dump() { + if(closed) + { + return; + } biomeLoader.clearCache(); blockLoader.clearCache(); lootLoader.clearCache(); + objectLoader.clearCache(); regionLoader.clearCache(); dimensionLoader.clearCache(); entityLoader.clearCache(); @@ -110,95 +125,13 @@ public class IrisDataManager structureLoader.clearCache(); } - private void writeExamples() - { - File examples = new File(dataFolder, "example"); - examples.mkdirs(); - String biomes = ""; - String envs = ""; - - for(Biome i : Biome.values()) - { - biomes += i.name() + "\n"; - } - - for(Environment i : Environment.values()) - { - envs += i.name() + "\n"; - } - - try - { - new File(examples, "example-pack/regions").mkdirs(); - new File(examples, "example-pack/biomes").mkdirs(); - new File(examples, "example-pack/dimensions").mkdirs(); - new File(examples, "example-pack/generators").mkdirs(); - IO.writeAll(new File(examples, "biome-list.txt"), biomes); - IO.writeAll(new File(examples, "environment-list.txt"), envs); - - IrisGenerator gen = new IrisGenerator(); - IrisNoiseGenerator n = new IrisNoiseGenerator(); - n.setSeed(1000); - IrisNoiseGenerator nf = new IrisNoiseGenerator(); - nf.setOctaves(3); - nf.setOpacity(16); - nf.setZoom(24); - nf.setSeed(44); - n.getFracture().add(nf); - IrisNoiseGenerator nf2 = new IrisNoiseGenerator(); - nf2.setOctaves(8); - nf2.setOpacity(24); - nf2.setZoom(64); - nf2.setSeed(55); - n.getFracture().add(nf2); - gen.getComposite().add(n); - - IrisDimension dim = new IrisDimension(); - - IrisRegion region = new IrisRegion(); - region.getLandBiomes().add("plains"); - region.getLandBiomes().add("desert"); - region.getLandBiomes().add("forest"); - region.getLandBiomes().add("mountains"); - region.getSeaBiomes().add("ocean"); - region.getShoreBiomes().add("beach"); - - IrisObjectPlacement o = new IrisObjectPlacement(); - o.getPlace().add("schematic1"); - o.getPlace().add("schematic2"); - - IrisBiome biome = new IrisBiome(); - biome.getChildren().add("another_biome"); - biome.getDecorators().add(new IrisDecorator()); - biome.getObjects().add(o); - - IO.writeAll(new File(examples, "example-pack/biomes/example-biome.json"), new JSONObject(new Gson().toJson(biome)).toString(4)); - IO.writeAll(new File(examples, "example-pack/regions/example-region.json"), new JSONObject(new Gson().toJson(region)).toString(4)); - IO.writeAll(new File(examples, "example-pack/dimensions/example-dimension.json"), new JSONObject(new Gson().toJson(dim)).toString(4)); - IO.writeAll(new File(examples, "example-pack/generators/example-generator.json"), new JSONObject(new Gson().toJson(gen)).toString(4)); - } - - catch(Throwable e) - { - - } - } - - public IrisDataManager preferFolder(String name) - { - biomeLoader.preferFolder(name); - blockLoader.preferFolder(name); - lootLoader.preferFolder(name); - regionLoader.preferFolder(name); - entityLoader.preferFolder(name); - dimensionLoader.preferFolder(name); - generatorLoader.preferFolder(name); - structureLoader.preferFolder(name); - return this; - } - public void clearLists() { + if(closed) + { + return; + } + lootLoader.clearList(); blockLoader.clearList(); entityLoader.clearList(); @@ -207,5 +140,77 @@ public class IrisDataManager dimensionLoader.clearList(); generatorLoader.clearList(); structureLoader.clearList(); + objectLoader.clearList(); + } + + public static IrisObject loadAnyObject(String key) + { + return loadAny(key, (dm) -> dm.getObjectLoader().load(key, false)); + } + + public static IrisBiome loadAnyBiome(String key) + { + return loadAny(key, (dm) -> dm.getBiomeLoader().load(key, false)); + } + + public static IrisStructure loadAnyStructure(String key) + { + return loadAny(key, (dm) -> dm.getStructureLoader().load(key, false)); + } + + public static IrisEntity loadAnyEntity(String key) + { + return loadAny(key, (dm) -> dm.getEntityLoader().load(key, false)); + } + + public static IrisLootTable loadAnyLootTable(String key) + { + return loadAny(key, (dm) -> dm.getLootLoader().load(key, false)); + } + + public static IrisBlockData loadAnyBlock(String key) + { + return loadAny(key, (dm) -> dm.getBlockLoader().load(key, false)); + } + + public static IrisRegion loadAnyRegion(String key) + { + return loadAny(key, (dm) -> dm.getRegionLoader().load(key, false)); + } + + public static IrisDimension loadAnyDimension(String key) + { + return loadAny(key, (dm) -> dm.getDimensionLoader().load(key, false)); + } + + public static IrisGenerator loadAnyGenerator(String key) + { + return loadAny(key, (dm) -> dm.getGeneratorLoader().load(key, false)); + } + + public static T loadAny(String key, Function v) { + try + { + for(File i : Iris.instance.getDataFolder("packs").listFiles()) + { + if(i.isDirectory()) + { + IrisDataManager dm = new IrisDataManager(i, true); + T t = v.apply(dm); + + if(t != null) + { + return t; + } + } + } + } + + catch(Throwable e) + { + e.printStackTrace(); + } + + return null; } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/manager/IrisHotloadManager.java b/src/main/java/com/volmit/iris/manager/IrisHotloadManager.java index 6cdd07dc1..245dd1b29 100644 --- a/src/main/java/com/volmit/iris/manager/IrisHotloadManager.java +++ b/src/main/java/com/volmit/iris/manager/IrisHotloadManager.java @@ -1,16 +1,15 @@ package com.volmit.iris.manager; -import java.io.File; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - import com.volmit.iris.Iris; import com.volmit.iris.IrisSettings; import com.volmit.iris.generator.legacy.scaffold.IrisContext; import com.volmit.iris.util.ChronoLatch; import com.volmit.iris.util.FolderWatcher; import com.volmit.iris.util.J; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.io.File; public class IrisHotloadManager { @@ -160,7 +159,6 @@ public class IrisHotloadManager } Bukkit.getConsoleSender().sendMessage(Iris.instance.getTag("Studio") + m); - Iris.globaldata.hotloaded(); ch.onHotloaded(); busy = false; }); diff --git a/src/main/java/com/volmit/iris/manager/IrisProject.java b/src/main/java/com/volmit/iris/manager/IrisProject.java index a73659306..781136de8 100644 --- a/src/main/java/com/volmit/iris/manager/IrisProject.java +++ b/src/main/java/com/volmit/iris/manager/IrisProject.java @@ -33,12 +33,6 @@ public class IrisProject this.name = path.getName(); } - private static void flush() - { - Iris.globaldata.dump(); - Iris.globaldata.preferFolder(null); - } - public boolean isOpen() { return activeProvider != null; @@ -58,13 +52,12 @@ public class IrisProject close(); } - flush(); - IrisDimension d = Iris.globaldata.getDimensionLoader().load(getName()); + IrisDimension d = IrisDataManager.loadAnyDimension(getName()); J.attemptAsync(() -> { try { - File f = d.getLoadFile().getParentFile().getParentFile(); + File f = d.getLoader().getDataFolder(); for(File i : f.listFiles()) { @@ -98,7 +91,6 @@ public class IrisProject return; } - Iris.globaldata.dump(); String wfp = "iris/" + UUID.randomUUID(); WorldCreator c = new IrisWorldCreator().dimension(getName()) @@ -184,7 +176,6 @@ public class IrisProject File folder = activeProvider.getTarget().getWorld().getWorldFolder(); Iris.linkMultiverseCore.removeFromConfig(activeProvider.getTarget().getWorld().getName()); Bukkit.unloadWorld(activeProvider.getTarget().getWorld().getName(), false); - flush(); J.attemptAsync(() -> IO.delete(folder)); activeProvider = null; } @@ -230,7 +221,6 @@ public class IrisProject public JSONObject createCodeWorkspaceConfig() { - Iris.globaldata.clearLists(); JSONObject ws = new JSONObject(); JSONArray folders = new JSONArray(); JSONObject folder = new JSONObject(); @@ -260,18 +250,16 @@ public class IrisProject jc.put("editor.suggest.insertMode", "replace"); settings.put("[json]", jc); settings.put("json.maxItemsComputed", 15000); - String gg = Iris.globaldata.getBiomeLoader().getPreferredFolder(); - Iris.globaldata.preferFolder(getName()); JSONArray schemas = new JSONArray(); - schemas.put(getSchemaEntry(IrisDimension.class, Iris.globaldata, "/dimensions/*.json")); - schemas.put(getSchemaEntry(IrisEntity.class, Iris.globaldata, "/entities/*.json")); - schemas.put(getSchemaEntry(IrisBiome.class, Iris.globaldata, "/biomes/*.json")); - schemas.put(getSchemaEntry(IrisRegion.class, Iris.globaldata, "/regions/*.json")); - schemas.put(getSchemaEntry(IrisGenerator.class, Iris.globaldata, "/generators/*.json")); - schemas.put(getSchemaEntry(IrisStructure.class, Iris.globaldata, "/structures/*.json")); - schemas.put(getSchemaEntry(IrisBlockData.class, Iris.globaldata, "/blocks/*.json")); - schemas.put(getSchemaEntry(IrisLootTable.class, Iris.globaldata, "/loot/*.json")); - Iris.globaldata.preferFolder(gg); + IrisDataManager dm = new IrisDataManager(getPath()); + schemas.put(getSchemaEntry(IrisDimension.class, dm, "/dimensions/*.json")); + schemas.put(getSchemaEntry(IrisEntity.class, dm, "/entities/*.json")); + schemas.put(getSchemaEntry(IrisBiome.class, dm, "/biomes/*.json")); + schemas.put(getSchemaEntry(IrisRegion.class, dm, "/regions/*.json")); + schemas.put(getSchemaEntry(IrisGenerator.class,dm, "/generators/*.json")); + schemas.put(getSchemaEntry(IrisStructure.class, dm, "/structures/*.json")); + schemas.put(getSchemaEntry(IrisBlockData.class, dm, "/blocks/*.json")); + schemas.put(getSchemaEntry(IrisLootTable.class, dm, "/loot/*.json")); settings.put("json.schemas", schemas); ws.put("settings", settings); @@ -291,10 +279,9 @@ public class IrisProject public File compilePackage(MortarSender sender, boolean obfuscate, boolean minify) { String dim = getName(); - Iris.globaldata.dump(); - Iris.globaldata.preferFolder(null); String dimm = dim; - IrisDimension dimension = Iris.globaldata.getDimensionLoader().load(dimm); + IrisDataManager dm = new IrisDataManager(path); + IrisDimension dimension = dm.getDimensionLoader().load(dimm); File folder = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey()); folder.mkdirs(); Iris.info("Packaging Dimension " + dimension.getName() + " " + (obfuscate ? "(Obfuscated)" : "")); @@ -305,34 +292,32 @@ public class IrisProject KSet generators = new KSet<>(); KSet loot = new KSet<>(); KSet blocks = new KSet<>(); - Iris.globaldata.preferFolder(dim); - for(String i : Iris.globaldata.getBlockLoader().getPreferredKeys()) + for(String i : dm.getDimensionLoader().getPossibleKeys()) { - blocks.add(Iris.globaldata.getBlockLoader().load(i)); + blocks.add(dm.getBlockLoader().load(i)); } - Iris.globaldata.preferFolder(null); - dimension.getRegions().forEach((i) -> regions.add(Iris.globaldata.getRegionLoader().load(i))); - dimension.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i))); + dimension.getRegions().forEach((i) -> regions.add(dm.getRegionLoader().load(i))); + dimension.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))); regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null))); biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null)))); regions.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null)))); biomes.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null)))); - regions.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)))); - biomes.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)))); - structures.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i)))); - structures.forEach((b) -> b.getTiles().forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(Iris.globaldata.getLootLoader().load(i))))); - structures.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); - structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))))); - biomes.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); - regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); - dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))); - structures.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); - structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))))); - biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); - regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity())))); - dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(Iris.globaldata.getEntityLoader().load(sp.getEntity()))); + regions.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)))); + biomes.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)))); + structures.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)))); + structures.forEach((b) -> b.getTiles().forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))))); + structures.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); + structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))))); + biomes.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); + regions.forEach((r) -> r.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); + dimension.getEntitySpawnOverrides().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))); + structures.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); + structures.forEach((s) -> s.getTiles().forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))))); + biomes.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); + regions.forEach((r) -> r.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity())))); + dimension.getEntityInitialSpawns().forEach((sp) -> entities.add(dm.getEntityLoader().load(sp.getEntity()))); KMap renameObjects = new KMap<>(); String a = ""; StringBuilder b = new StringBuilder(); @@ -423,7 +408,7 @@ public class IrisProject { try { - File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0)); + File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0)); IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); gb.append(IO.hash(f)); ggg.set(ggg.get() + 1); @@ -446,7 +431,7 @@ public class IrisProject { try { - File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0)); + File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0)); IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); gb.append(IO.hash(f)); ggg.set(ggg.get() + 1); @@ -469,7 +454,7 @@ public class IrisProject { try { - File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0)); + File f = dm.getObjectLoader().findFile(lookupObjects.get(k).get(0)); IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); gb.append(IO.hash(f)); ggg.set(ggg.get() + 1); diff --git a/src/main/java/com/volmit/iris/manager/ProjectManager.java b/src/main/java/com/volmit/iris/manager/ProjectManager.java index 3cc9d36f3..bcd589255 100644 --- a/src/main/java/com/volmit/iris/manager/ProjectManager.java +++ b/src/main/java/com/volmit/iris/manager/ProjectManager.java @@ -1,28 +1,19 @@ package com.volmit.iris.manager; -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.util.UUID; - -import org.zeroturnaround.zip.ZipUtil; -import org.zeroturnaround.zip.commons.FileUtils; - import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.volmit.iris.Iris; import com.volmit.iris.IrisSettings; import com.volmit.iris.object.IrisDimension; -import com.volmit.iris.util.Form; -import com.volmit.iris.util.IO; -import com.volmit.iris.util.J; -import com.volmit.iris.util.JSONArray; -import com.volmit.iris.util.JSONException; -import com.volmit.iris.util.JSONObject; -import com.volmit.iris.util.KMap; -import com.volmit.iris.util.MortarSender; - +import com.volmit.iris.util.*; import lombok.Data; +import org.zeroturnaround.zip.ZipUtil; +import org.zeroturnaround.zip.commons.FileUtils; + +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.util.UUID; @Data public class ProjectManager @@ -64,7 +55,8 @@ public class ProjectManager { sender.sendMessage("Looking for Package: " + type); File iris = new File(folder, "iris"); - IrisDimension dim = Iris.globaldata.getDimensionLoader().load(type); + File irispack = new File(folder, "iris/pack"); + IrisDimension dim = IrisDataManager.loadAnyDimension(type); if(dim == null) { @@ -73,7 +65,7 @@ public class ProjectManager if(i.isFile() && i.getName().equals(type + ".iris")) { sender.sendMessage("Found " + type + ".iris in " + ProjectManager.WORKSPACE_NAME + " folder"); - ZipUtil.unpack(i, iris); + ZipUtil.unpack(i, irispack); break; } } @@ -86,7 +78,7 @@ public class ProjectManager try { - FileUtils.copyDirectory(f, iris); + FileUtils.copyDirectory(f, irispack); } catch(IOException e) @@ -95,12 +87,10 @@ public class ProjectManager } } - File dimf = new File(iris, "dimensions/" + type + ".json"); + File dimf = new File(irispack, "dimensions/" + type + ".json"); if(!dimf.exists() || !dimf.isFile()) { - Iris.globaldata.dump(); - Iris.globaldata.preferFolder(null); Iris.proj.downloadSearch(sender, type, false); File downloaded = Iris.proj.getWorkspaceFolder(type); @@ -110,7 +100,7 @@ public class ProjectManager { try { - FileUtils.copyFile(i, new File(iris, i.getName())); + FileUtils.copyFile(i, new File(irispack, i.getName())); } catch(IOException e) @@ -123,7 +113,7 @@ public class ProjectManager { try { - FileUtils.copyDirectory(i, new File(iris, i.getName())); + FileUtils.copyDirectory(i, new File(irispack, i.getName())); } catch(IOException e) @@ -142,7 +132,7 @@ public class ProjectManager return null; } - IrisDataManager dm = new IrisDataManager(folder); + IrisDataManager dm = new IrisDataManager(irispack); dim = dm.getDimensionLoader().load(type); if(dim == null) @@ -236,10 +226,7 @@ public class ProjectManager IO.delete(packEntry); } - Iris.globaldata.dump(); - Iris.globaldata.preferFolder(null); - - if(Iris.globaldata.getDimensionLoader().load(key) != null) + if(IrisDataManager.loadAnyDimension(key) != null) { sender.sendMessage("Another dimension in the packs folder is already using the key " + key + " IMPORT FAILED!"); return; @@ -263,8 +250,6 @@ public class ProjectManager } sender.sendMessage("Successfully Aquired " + d.getName()); - Iris.globaldata.dump(); - Iris.globaldata.preferFolder(null); } public KMap getListing(boolean cached) diff --git a/src/main/java/com/volmit/iris/manager/SchemaBuilder.java b/src/main/java/com/volmit/iris/manager/SchemaBuilder.java index 941281883..92da5c164 100644 --- a/src/main/java/com/volmit/iris/manager/SchemaBuilder.java +++ b/src/main/java/com/volmit/iris/manager/SchemaBuilder.java @@ -1,36 +1,14 @@ package com.volmit.iris.manager; -import java.awt.GraphicsEnvironment; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.List; - +import com.volmit.iris.Iris; +import com.volmit.iris.util.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.potion.PotionEffectType; -import com.volmit.iris.Iris; -import com.volmit.iris.util.ArrayType; -import com.volmit.iris.util.B; -import com.volmit.iris.util.Desc; -import com.volmit.iris.util.JSONArray; -import com.volmit.iris.util.JSONObject; -import com.volmit.iris.util.KList; -import com.volmit.iris.util.KMap; -import com.volmit.iris.util.MaxNumber; -import com.volmit.iris.util.MinNumber; -import com.volmit.iris.util.RegistryListBiome; -import com.volmit.iris.util.RegistryListBlockType; -import com.volmit.iris.util.RegistryListDimension; -import com.volmit.iris.util.RegistryListEntity; -import com.volmit.iris.util.RegistryListFont; -import com.volmit.iris.util.RegistryListGenerator; -import com.volmit.iris.util.RegistryListItemType; -import com.volmit.iris.util.RegistryListLoot; -import com.volmit.iris.util.RegistryListMythical; -import com.volmit.iris.util.RegistryListObject; -import com.volmit.iris.util.RegistryListRegion; -import com.volmit.iris.util.RegistryListStructure; -import com.volmit.iris.util.Required; +import java.awt.*; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.List; public class SchemaBuilder { @@ -198,7 +176,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getBiomeLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getBiomeLoader().getPossibleKeys())); definitions.put(key, j); } @@ -233,7 +211,7 @@ public class SchemaBuilder JSONObject j = new JSONObject(); JSONArray ja = new JSONArray(); - for(String i : data.getBlockLoader().getPreferredKeys()) + for(String i : data.getBlockLoader().getPossibleKeys()) { ja.put(i); } @@ -277,7 +255,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getEntityLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getEntityLoader().getPossibleKeys())); definitions.put(key, j); } @@ -311,7 +289,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getLootLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getLootLoader().getPossibleKeys())); definitions.put(key, j); } @@ -327,7 +305,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getDimensionLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getDimensionLoader().getPossibleKeys())); definitions.put(key, j); } @@ -344,7 +322,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getGeneratorLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getGeneratorLoader().getPossibleKeys())); definitions.put(key, j); } @@ -361,7 +339,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getObjectLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getObjectLoader().getPossibleKeys())); definitions.put(key, j); } @@ -378,7 +356,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getRegionLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getRegionLoader().getPossibleKeys())); definitions.put(key, j); } @@ -395,7 +373,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getStructureLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getStructureLoader().getPossibleKeys())); definitions.put(key, j); } @@ -560,7 +538,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getBiomeLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getBiomeLoader().getPossibleKeys())); definitions.put(key, j); } @@ -605,7 +583,7 @@ public class SchemaBuilder JSONObject j = new JSONObject(); JSONArray ja = new JSONArray(); - for(String i : data.getBlockLoader().getPreferredKeys()) + for(String i : data.getBlockLoader().getPossibleKeys()) { ja.put(i); } @@ -651,7 +629,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getEntityLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getEntityLoader().getPossibleKeys())); definitions.put(key, j); } @@ -687,7 +665,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getLootLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getLootLoader().getPossibleKeys())); definitions.put(key, j); } @@ -705,7 +683,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getDimensionLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getDimensionLoader().getPossibleKeys())); definitions.put(key, j); } @@ -723,7 +701,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getGeneratorLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getGeneratorLoader().getPossibleKeys())); definitions.put(key, j); } @@ -741,7 +719,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getObjectLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getObjectLoader().getPossibleKeys())); definitions.put(key, j); } @@ -759,7 +737,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getRegionLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getRegionLoader().getPossibleKeys())); definitions.put(key, j); } @@ -777,7 +755,7 @@ public class SchemaBuilder if(!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", new JSONArray(data.getStructureLoader().getPreferredKeys())); + j.put("enum", new JSONArray(data.getStructureLoader().getPossibleKeys())); definitions.put(key, j); } diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIris.java b/src/main/java/com/volmit/iris/manager/command/CommandIris.java index 3d4e4cbf9..20c0a42a2 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIris.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIris.java @@ -41,6 +41,9 @@ public class CommandIris extends MortarCommand @Command private CommandIrisLMM lmm; + @Command + private CommandIrisIDM idm; + @Command private CommandIrisRegen regen; diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisIDM.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisIDM.java new file mode 100644 index 000000000..25832a9f2 --- /dev/null +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisIDM.java @@ -0,0 +1,43 @@ +package com.volmit.iris.manager.command; + +import com.volmit.iris.Iris; +import com.volmit.iris.manager.IrisDataManager; +import com.volmit.iris.util.KList; +import com.volmit.iris.util.MortarCommand; +import com.volmit.iris.util.MortarSender; + +public class CommandIrisIDM extends MortarCommand +{ + public CommandIrisIDM() + { + super("idm"); + setDescription("Diagnostics for Iris Data Managers"); + requiresPermission(Iris.perm.studio); + setCategory("World"); + } + + + @Override + public void addTabOptions(MortarSender sender, String[] args, KList list) { + + } + @Override + public boolean handle(MortarSender sender, String[] args) + { + if(sender.isPlayer()) + { + sender.sendMessage("Use this in the console."); + return true; + } + + sender.sendMessage("Total Managers: " + IrisDataManager.managers.size()); + IrisDataManager.dumpManagers(); + return true; + } + + @Override + protected String getArgsUsage() + { + return ""; + } +} diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisObjectPaste.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisObjectPaste.java index ac432e2bf..045ae56c6 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisObjectPaste.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisObjectPaste.java @@ -1,22 +1,22 @@ package com.volmit.iris.manager.command; -import java.io.File; -import java.util.Set; - +import com.volmit.iris.Iris; +import com.volmit.iris.IrisSettings; +import com.volmit.iris.manager.IrisDataManager; +import com.volmit.iris.manager.ProjectManager; +import com.volmit.iris.manager.WandManager; +import com.volmit.iris.object.IrisObject; import com.volmit.iris.util.KList; +import com.volmit.iris.util.MortarCommand; +import com.volmit.iris.util.MortarSender; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import com.volmit.iris.Iris; -import com.volmit.iris.IrisSettings; -import com.volmit.iris.manager.ProjectManager; -import com.volmit.iris.manager.WandManager; -import com.volmit.iris.object.IrisObject; -import com.volmit.iris.util.MortarCommand; -import com.volmit.iris.util.MortarSender; +import java.io.File; +import java.util.Set; public class CommandIrisObjectPaste extends MortarCommand { @@ -54,7 +54,16 @@ public class CommandIrisObjectPaste extends MortarCommand } Player p = sender.player(); - File file = Iris.globaldata.getObjectLoader().findFile(args[0]); + IrisObject obj = IrisDataManager.loadAnyObject(args[0]); + + if(obj == null) + { + + sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder"); + return true; + } + + File file = obj.getLoadFile(); boolean intoWand = false; for(String i : args) @@ -68,11 +77,12 @@ public class CommandIrisObjectPaste extends MortarCommand if(file == null || !file.exists()) { sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder"); + return true; } ItemStack wand = sender.player().getInventory().getItemInMainHand(); - IrisObject o = Iris.globaldata.getObjectLoader().load(args[0]); + IrisObject o = IrisDataManager.loadAnyObject(args[0]); if(o == null) { sender.sendMessage("Error, cant find"); diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisStructureOpen.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisStructureOpen.java index fd55a1a8a..991733410 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisStructureOpen.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisStructureOpen.java @@ -1,5 +1,6 @@ package com.volmit.iris.manager.command; +import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.util.KList; import org.bukkit.entity.Player; @@ -47,7 +48,7 @@ public class CommandIrisStructureOpen extends MortarCommand Player p = sender.player(); - IrisStructure structure = Iris.globaldata.getStructureLoader().load(args[0]); + IrisStructure structure = IrisDataManager.loadAnyStructure(args[0]); if(structure == null) { diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisStudio.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisStudio.java index b6b557783..9c6366adf 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisStudio.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisStudio.java @@ -30,9 +30,6 @@ public class CommandIrisStudio extends MortarCommand @Command private CommandIrisStudioMap map; - @Command - private CommandIrisStudioList list; - @Command private CommandIrisStudioGoto got0; diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioGoto.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioGoto.java index 9b2f9cdfe..ee9400565 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioGoto.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioGoto.java @@ -1,6 +1,7 @@ package com.volmit.iris.manager.command; import com.volmit.iris.Iris; +import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisRegion; import com.volmit.iris.scaffold.IrisWorlds; @@ -24,7 +25,7 @@ public class CommandIrisStudioGoto extends MortarCommand public void addTabOptions(MortarSender sender, String[] args, KList list) { if(args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld())) { - list.add(IrisWorlds.access(sender.player().getWorld()).getData().getBiomeLoader().getPreferredKeys()); + list.add(IrisWorlds.access(sender.player().getWorld()).getData().getBiomeLoader().getPossibleKeys()); } } @@ -51,8 +52,8 @@ public class CommandIrisStudioGoto extends MortarCommand } IrisAccess g = IrisWorlds.access(world); - IrisBiome b = Iris.globaldata.getBiomeLoader().load(args[0], false); - IrisRegion r = Iris.globaldata.getRegionLoader().load(args[0], false); + IrisBiome b = IrisDataManager.loadAnyBiome(args[0]); + IrisRegion r = IrisDataManager.loadAnyRegion(args[0]); if(b != null) { @@ -75,7 +76,7 @@ public class CommandIrisStudioGoto extends MortarCommand else if(r != null) { J.a(() -> { - Location l = g.lookForRegion(r, 10000, (v) -> sender.sendMessage("Looking for " + C.BOLD + C.WHITE + r.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places")); + Location l = g.lookForRegion(r, 60000, (v) -> sender.sendMessage(C.BOLD +""+ C.WHITE + r.getName() + C.RESET + C.GRAY + ": Checked " + Form.f(v) + " Places")); if(l == null) { diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioList.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioList.java deleted file mode 100644 index 59ad5533c..000000000 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisStudioList.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.volmit.iris.manager.command; - -import java.io.File; - -import com.volmit.iris.Iris; -import com.volmit.iris.IrisSettings; -import com.volmit.iris.object.IrisDimension; -import com.volmit.iris.util.KList; -import com.volmit.iris.util.MortarCommand; -import com.volmit.iris.util.MortarSender; - -public class CommandIrisStudioList extends MortarCommand -{ - public CommandIrisStudioList() - { - super("list", "l"); - requiresPermission(Iris.perm.studio); - setDescription("List projects that can be opened."); - setCategory("Studio"); - } - - @Override - public void addTabOptions(MortarSender sender, String[] args, KList list) { - - } - - @Override - public boolean handle(MortarSender sender, String[] args) - { - if(!IrisSettings.get().isStudio()) - { - sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json"); - return true; - } - - int m = 0; - for(File i : Iris.globaldata.getDimensionLoader().getFolders()) - { - for(File j : i.listFiles()) - { - if(j.isFile() && j.getName().endsWith(".json")) - { - try - { - m++; - IrisDimension d = Iris.globaldata.getDimensionLoader().load(j.getName().replaceAll("\\Q.json\\E", "")); - sender.sendMessage("- " + d.getLoadKey() + " (" + d.getName() + ")"); - } - catch(Throwable e) - { - - } - } - } - } - - sender.sendMessage("Found " + m + " project" + (m == 1 ? "" : "s")); - - return true; - } - - @Override - protected String getArgsUsage() - { - return ""; - } -} diff --git a/src/main/java/com/volmit/iris/manager/structure/StructureTemplate.java b/src/main/java/com/volmit/iris/manager/structure/StructureTemplate.java index 25611ab88..efb749950 100644 --- a/src/main/java/com/volmit/iris/manager/structure/StructureTemplate.java +++ b/src/main/java/com/volmit/iris/manager/structure/StructureTemplate.java @@ -1,62 +1,23 @@ package com.volmit.iris.manager.structure; -import java.io.File; -import java.util.Iterator; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.World; +import com.google.gson.Gson; +import com.volmit.iris.Iris; +import com.volmit.iris.generator.noise.CNG; +import com.volmit.iris.object.*; +import com.volmit.iris.util.*; +import lombok.Data; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockBurnEvent; -import org.bukkit.event.block.BlockCookEvent; -import org.bukkit.event.block.BlockFadeEvent; -import org.bukkit.event.block.BlockFertilizeEvent; -import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.block.BlockFromToEvent; -import org.bukkit.event.block.BlockGrowEvent; -import org.bukkit.event.block.BlockIgniteEvent; -import org.bukkit.event.block.BlockPhysicsEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.*; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.util.BlockVector; -import com.google.gson.Gson; -import com.volmit.iris.Iris; -import com.volmit.iris.generator.noise.CNG; -import com.volmit.iris.object.IrisObject; -import com.volmit.iris.object.IrisStructure; -import com.volmit.iris.object.IrisStructureTile; -import com.volmit.iris.object.NoiseStyle; -import com.volmit.iris.object.StructureTileCondition; -import com.volmit.iris.object.TileResult; -import com.volmit.iris.util.B; -import com.volmit.iris.util.C; -import com.volmit.iris.util.ChronoLatch; -import com.volmit.iris.util.Cuboid; -import com.volmit.iris.util.Form; -import com.volmit.iris.util.IO; -import com.volmit.iris.util.IObjectPlacer; -import com.volmit.iris.util.J; -import com.volmit.iris.util.JSONObject; -import com.volmit.iris.util.KMap; -import com.volmit.iris.util.MaterialBlock; -import com.volmit.iris.util.RNG; -import com.volmit.iris.util.UIElement; -import com.volmit.iris.util.UIStaticDecorator; -import com.volmit.iris.util.UIWindow; -import com.volmit.iris.util.Window; -import com.volmit.iris.util.WindowResolution; - -import lombok.Data; +import java.io.File; +import java.util.Iterator; @Data public class StructureTemplate implements Listener, IObjectPlacer @@ -184,8 +145,7 @@ public class StructureTemplate implements Listener, IObjectPlacer for(String k : j.getObjects()) { int v = hijacked.getForceObjects().size() + 1; - Iris.globaldata.dump(); - IrisObject o = Iris.globaldata.getObjectLoader().load(k).copy(); + IrisObject o = input.getLoader().getObjectLoader().load(k).copy(); String b = o.getLoadKey(); o.setLoadKey(realType + "-" + v); @@ -574,7 +534,7 @@ public class StructureTemplate implements Listener, IObjectPlacer return; } - r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng, Iris.globaldata); + r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng, r.getStructure().getLoader()); if(!quiet) { center.getWorld().playSound(center, Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 1.6f); diff --git a/src/main/java/com/volmit/iris/object/IrisBiome.java b/src/main/java/com/volmit/iris/object/IrisBiome.java index 96c18f5d4..4a9de4e7d 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiome.java +++ b/src/main/java/com/volmit/iris/object/IrisBiome.java @@ -1,6 +1,5 @@ package com.volmit.iris.object; -import com.volmit.iris.Iris; import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.manager.IrisDataManager; @@ -604,7 +603,7 @@ public class IrisBiome extends IrisRegistrant implements IRare for(String i : getChildren()) { - realChildren.add(g != null ? g.getData().getBiomeLoader().load(i) : Iris.globaldata.getBiomeLoader().load(i)); + realChildren.add(g.getData().getBiomeLoader().load(i)); } return realChildren; @@ -621,7 +620,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { for(String i : getChildren()) { - IrisBiome b = g != null ? g.getData().getBiomeLoader().load(i) : Iris.globaldata.getBiomeLoader().load(i); + IrisBiome b = g.getData().getBiomeLoader().load(i); int l = limit; m.addAll(b.getAllChildren(g, l)); } diff --git a/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java b/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java index 8ae72f4f2..b2f9a3265 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java +++ b/src/main/java/com/volmit/iris/object/IrisBiomeGeneratorLink.java @@ -1,17 +1,8 @@ package com.volmit.iris.object; -import com.volmit.iris.Iris; import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.scaffold.data.DataProvider; -import com.volmit.iris.util.DependsOn; -import com.volmit.iris.util.Desc; -import com.volmit.iris.util.DontObfuscate; -import com.volmit.iris.util.IrisInterpolation; -import com.volmit.iris.util.MaxNumber; -import com.volmit.iris.util.MinNumber; -import com.volmit.iris.util.RegistryListGenerator; -import com.volmit.iris.util.Required; - +import com.volmit.iris.util.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -52,7 +43,7 @@ public class IrisBiomeGeneratorLink { return gen.aquire(() -> { - IrisGenerator gen = g != null ? g.getData().getGeneratorLoader().load(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator()); + IrisGenerator gen = g.getData().getGeneratorLoader().load(getGenerator()); if(gen == null) { diff --git a/src/main/java/com/volmit/iris/object/IrisDimension.java b/src/main/java/com/volmit/iris/object/IrisDimension.java index 174aad175..af6d4cb58 100644 --- a/src/main/java/com/volmit/iris/object/IrisDimension.java +++ b/src/main/java/com/volmit/iris/object/IrisDimension.java @@ -1,6 +1,5 @@ package com.volmit.iris.object; -import com.volmit.iris.Iris; import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.scaffold.engine.GeneratorAccess; @@ -383,7 +382,7 @@ public class IrisDimension extends IrisRegistrant for(String i : getRegions()) { - r.add(g != null ? g.getData().getRegionLoader().load(i) : Iris.globaldata.getRegionLoader().load(i)); + r.add(g.getData().getRegionLoader().load(i)); } return r; diff --git a/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java b/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java index cacea8c8f..5ec732623 100644 --- a/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java +++ b/src/main/java/com/volmit/iris/object/IrisObjectPlacement.java @@ -1,19 +1,9 @@ package com.volmit.iris.object; -import com.volmit.iris.Iris; import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.noise.CNG; -import com.volmit.iris.util.ArrayType; -import com.volmit.iris.util.Desc; -import com.volmit.iris.util.DontObfuscate; -import com.volmit.iris.util.KList; -import com.volmit.iris.util.MaxNumber; -import com.volmit.iris.util.MinNumber; -import com.volmit.iris.util.RNG; -import com.volmit.iris.util.RegistryListObject; -import com.volmit.iris.util.Required; import com.volmit.iris.scaffold.data.DataProvider; - +import com.volmit.iris.util.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -152,7 +142,7 @@ public class IrisObjectPlacement return null; } - return (g == null ? Iris.globaldata : g.getData()).getObjectLoader().load(place.get(random.nextInt(place.size()))); + return g.getData().getObjectLoader().load(place.get(random.nextInt(place.size()))); } public int getTriesForChunk(RNG random) diff --git a/src/main/java/com/volmit/iris/object/IrisRegion.java b/src/main/java/com/volmit/iris/object/IrisRegion.java index 6793a866f..4cab85655 100644 --- a/src/main/java/com/volmit/iris/object/IrisRegion.java +++ b/src/main/java/com/volmit/iris/object/IrisRegion.java @@ -1,22 +1,9 @@ package com.volmit.iris.object; -import com.volmit.iris.Iris; import com.volmit.iris.generator.legacy.atomics.AtomicCache; -import com.volmit.iris.scaffold.data.DataProvider; import com.volmit.iris.generator.noise.CNG; -import com.volmit.iris.util.ArrayType; -import com.volmit.iris.util.Desc; -import com.volmit.iris.util.DontObfuscate; -import com.volmit.iris.util.IRare; -import com.volmit.iris.util.KList; -import com.volmit.iris.util.KMap; -import com.volmit.iris.util.KSet; -import com.volmit.iris.util.MaxNumber; -import com.volmit.iris.util.MinNumber; -import com.volmit.iris.util.RNG; -import com.volmit.iris.util.RegistryListBiome; -import com.volmit.iris.util.Required; - +import com.volmit.iris.scaffold.data.DataProvider; +import com.volmit.iris.util.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -400,7 +387,7 @@ public class IrisRegion extends IrisRegistrant implements IRare continue; } - IrisBiome biome = (g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i); + IrisBiome biome = g.getData().getBiomeLoader().load(i); names.remove(i); if(biome == null) @@ -460,7 +447,7 @@ public class IrisRegion extends IrisRegistrant implements IRare for(String i : getCaveBiomes()) { - realCaveBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); + realCaveBiomes.add(g.getData().getBiomeLoader().load(i)); } return realCaveBiomes; @@ -475,7 +462,7 @@ public class IrisRegion extends IrisRegistrant implements IRare for(String i : getLakeBiomes()) { - realLakeBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); + realLakeBiomes.add(g.getData().getBiomeLoader().load(i)); } return realLakeBiomes; @@ -490,7 +477,7 @@ public class IrisRegion extends IrisRegistrant implements IRare for(String i : getRiverBiomes()) { - realRiverBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); + realRiverBiomes.add(g.getData().getBiomeLoader().load(i)); } return realRiverBiomes; @@ -505,7 +492,7 @@ public class IrisRegion extends IrisRegistrant implements IRare for(String i : getShoreBiomes()) { - realShoreBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); + realShoreBiomes.add(g.getData().getBiomeLoader().load(i)); } return realShoreBiomes; @@ -520,7 +507,7 @@ public class IrisRegion extends IrisRegistrant implements IRare for(String i : getSeaBiomes()) { - realSeaBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); + realSeaBiomes.add(g.getData().getBiomeLoader().load(i)); } return realSeaBiomes; @@ -535,7 +522,7 @@ public class IrisRegion extends IrisRegistrant implements IRare for(String i : getLandBiomes()) { - realLandBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i)); + realLandBiomes.add(g.getData().getBiomeLoader().load(i)); } return realLandBiomes; diff --git a/src/main/java/com/volmit/iris/object/IrisRegistrant.java b/src/main/java/com/volmit/iris/object/IrisRegistrant.java index fa34f21df..b76580f4b 100644 --- a/src/main/java/com/volmit/iris/object/IrisRegistrant.java +++ b/src/main/java/com/volmit/iris/object/IrisRegistrant.java @@ -1,12 +1,15 @@ package com.volmit.iris.object; -import java.io.File; - +import com.volmit.iris.manager.IrisDataManager; import lombok.Data; +import java.io.File; + @Data public class IrisRegistrant { + private transient IrisDataManager loader; + private transient String loadKey; private transient File loadFile; diff --git a/src/main/java/com/volmit/iris/object/IrisStructurePlacement.java b/src/main/java/com/volmit/iris/object/IrisStructurePlacement.java index cbcc1cf2d..f2ea3a124 100644 --- a/src/main/java/com/volmit/iris/object/IrisStructurePlacement.java +++ b/src/main/java/com/volmit/iris/object/IrisStructurePlacement.java @@ -1,6 +1,5 @@ package com.volmit.iris.object; -import com.volmit.iris.Iris; import com.volmit.iris.generator.legacy.atomics.AtomicCache; import com.volmit.iris.generator.noise.CellGenerator; import com.volmit.iris.scaffold.data.DataProvider; @@ -84,7 +83,7 @@ public class IrisStructurePlacement public IrisStructure getStructure(DataProvider g) { - return structure.aquire(() -> (g == null ? Iris.globaldata : g.getData()).getStructureLoader().load(getTileset())); + return structure.aquire(() -> g.getData().getStructureLoader().load(getTileset())); } public CellGenerator getChanceGenerator(RNG g) diff --git a/src/main/java/com/volmit/iris/scaffold/IrisWorldCreator.java b/src/main/java/com/volmit/iris/scaffold/IrisWorldCreator.java index 6621c2e13..9f46ff437 100644 --- a/src/main/java/com/volmit/iris/scaffold/IrisWorldCreator.java +++ b/src/main/java/com/volmit/iris/scaffold/IrisWorldCreator.java @@ -1,6 +1,6 @@ package com.volmit.iris.scaffold; -import com.volmit.iris.Iris; +import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.IrisDimension; import com.volmit.iris.scaffold.engine.EngineCompositeGenerator; import org.bukkit.World; @@ -71,7 +71,7 @@ public class IrisWorldCreator return World.Environment.NORMAL; } - IrisDimension dim = Iris.globaldata.getDimensionLoader().load(dimensionName); + IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName); if(dim != null) { diff --git a/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java b/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java index 53c91fc89..2b514995c 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java @@ -58,7 +58,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce public void hotload() { - Iris.globaldata.dump(); + getData().dump(); initialized.lazySet(false); } @@ -78,7 +78,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce for (File j : i.listFiles()) { if (j.isFile() && j.getName().endsWith(".json")) { hint = j.getName().replaceAll("\\Q.json\\E", ""); - break searching; + Iris.error("Found v1 install. Please create a new world, this will cause chunks to change in your existing iris worlds!"); + throw new RuntimeException(); } } } @@ -97,14 +98,14 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce throw new RuntimeException("Cannot find iris dimension data for world: " + world.getName() + "! FAILED"); } - dim = Iris.globaldata.preferFolder(hint).getDimensionLoader().load(hint); + dim = IrisDataManager.loadAnyDimension(hint); if (dim == null) { throw new RuntimeException("Cannot find dimension: " + hint); } if (production) { - dim = new IrisDataManager(getDataFolder(world), true).preferFolder(dim.getLoadKey()).getDimensionLoader().load(dim.getLoadKey()); + dim = new IrisDataManager(getDataFolder(world)).getDimensionLoader().load(dim.getLoadKey()); if (dim == null) { throw new RuntimeException("Cannot find dimension: " + hint); @@ -119,9 +120,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce return; } - IrisDataManager data = production ? new IrisDataManager(getDataFolder(world)) : Iris.globaldata.copy(); IrisDimension dim = getDimension(world); - data.preferFolder(dim.getLoadKey()); + IrisDataManager data = production ? new IrisDataManager(getDataFolder(world)) : dim.getLoader().copy(); compound = new IrisEngineCompound(world, dim, data, Iris.getThreadCount()); initialized.set(true); populators.clear(); diff --git a/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java b/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java index 5bc67717a..b3bc12376 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java @@ -137,7 +137,7 @@ public interface IrisAccess extends Hotloadable, DataProvider { public default Location lookForRegion(IrisRegion reg, long timeout, Consumer triesc) { - ChronoLatch cl = new ChronoLatch(250, false); + ChronoLatch cl = new ChronoLatch(3000, false); long s = M.ms(); int cpus = 2+(Runtime.getRuntime().availableProcessors()/2); KList engines = new KList<>(); diff --git a/src/main/java/com/volmit/iris/scaffold/parallel/MultiBurst.java b/src/main/java/com/volmit/iris/scaffold/parallel/MultiBurst.java index e35d23b5a..5533ec368 100644 --- a/src/main/java/com/volmit/iris/scaffold/parallel/MultiBurst.java +++ b/src/main/java/com/volmit/iris/scaffold/parallel/MultiBurst.java @@ -1,16 +1,37 @@ package com.volmit.iris.scaffold.parallel; +import com.volmit.iris.Iris; + import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; public class MultiBurst { public static MultiBurst burst = new MultiBurst(Runtime.getRuntime().availableProcessors()); private ExecutorService service; + private int tid; public MultiBurst(int tc) { - service = Executors.newWorkStealingPool(tc); + service = Executors.newFixedThreadPool(tc, new ThreadFactory() + { + @Override + public Thread newThread(Runnable r) + { + tid++; + Thread t = new Thread(r); + t.setName("Iris Generator " + tid); + t.setPriority(Thread.MAX_PRIORITY); + t.setUncaughtExceptionHandler((et, e) -> + { + Iris.info("Exception encountered in " + et.getName()); + e.printStackTrace(); + }); + + return t; + } + }); } public void burst(Runnable... r) diff --git a/src/main/java/com/volmit/iris/util/ObjectResourceLoader.java b/src/main/java/com/volmit/iris/util/ObjectResourceLoader.java index 2825bc0a1..6c50ac4de 100644 --- a/src/main/java/com/volmit/iris/util/ObjectResourceLoader.java +++ b/src/main/java/com/volmit/iris/util/ObjectResourceLoader.java @@ -1,6 +1,7 @@ package com.volmit.iris.util; import com.volmit.iris.Iris; +import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.IrisObject; import java.io.File; @@ -10,9 +11,9 @@ public class ObjectResourceLoader extends ResourceLoader private ChronoLatch useFlip = new ChronoLatch(2863); private KMap useCache = new KMap<>(); - public ObjectResourceLoader(File root, String folderName, String resourceTypeName) + public ObjectResourceLoader(File root, IrisDataManager idm, String folderName, String resourceTypeName) { - super(root, folderName, resourceTypeName, IrisObject.class); + super(root, idm, folderName, resourceTypeName, IrisObject.class); } public int getSize() @@ -92,6 +93,8 @@ public class ObjectResourceLoader extends ResourceLoader loadCache.put(key, t); J.a(() -> Iris.verbose("Loading " + resourceTypeName + ": " + j.getPath())); t.setLoadKey(name); + t.setLoader(manager); + t.setLoadFile(j); lock.unlock(); return t; } @@ -104,64 +107,6 @@ public class ObjectResourceLoader extends ResourceLoader } } - public String[] getPreferredKeys() - { - if(preferredFolder == null || preferredFolder.isEmpty()) - { - return getPossibleKeys(); - } - - if(possibleKeys != null) - { - return possibleKeys; - } - - Iris.info("Building " + resourceTypeName + " Preference Lists"); - KSet m = new KSet<>(); - - for(File i : getFolders()) - { - for(File j : i.listFiles()) - { - if(!j.getPath().contains(preferredFolder)) - { - continue; - } - - if(j.isFile() && j.getName().endsWith(".iob")) - { - m.add(j.getName().replaceAll("\\Q.iob\\E", "")); - } - - else if(j.isDirectory()) - { - for(File k : j.listFiles()) - { - if(k.isFile() && k.getName().endsWith(".iob")) - { - m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.iob\\E", "")); - } - - else if(k.isDirectory()) - { - for(File l : k.listFiles()) - { - if(l.isFile() && l.getName().endsWith(".iob")) - { - m.add(j.getName() + "/" + k.getName() + "/" + l.getName().replaceAll("\\Q.iob\\E", "")); - } - } - } - } - } - } - } - - KList v = new KList<>(m); - possibleKeys = v.toArray(new String[v.size()]); - return possibleKeys; - } - public String[] getPossibleKeys() { if(possibleKeys != null) diff --git a/src/main/java/com/volmit/iris/util/ResourceLoader.java b/src/main/java/com/volmit/iris/util/ResourceLoader.java index 97827fa8d..aa1c5a2d9 100644 --- a/src/main/java/com/volmit/iris/util/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/util/ResourceLoader.java @@ -1,13 +1,13 @@ package com.volmit.iris.util; -import java.io.File; - import com.google.gson.Gson; import com.volmit.iris.Iris; +import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.object.IrisRegistrant; - import lombok.Data; +import java.io.File; + @Data public class ResourceLoader { @@ -20,13 +20,13 @@ public class ResourceLoader protected Class objectClass; protected String cname; protected IrisLock lock; - protected String preferredFolder = null; protected String[] possibleKeys = null; - protected String[] preferredKeys = null; + protected IrisDataManager manager; - public ResourceLoader(File root, String folderName, String resourceTypeName, Class objectClass) + public ResourceLoader(File root, IrisDataManager manager, String folderName, String resourceTypeName, Class objectClass) { lock = new IrisLock("Res"); + this.manager = manager; folderMapCache = new KMap<>(); this.objectClass = objectClass; cname = objectClass.getCanonicalName(); @@ -36,53 +36,6 @@ public class ResourceLoader loadCache = new KMap<>(); } - public String[] getPreferredKeys() - { - if(preferredFolder == null || preferredFolder.isEmpty()) - { - return getPossibleKeys(); - } - - if(preferredKeys != null) - { - return preferredKeys; - } - - Iris.info("Building " + resourceTypeName + " Preference Lists"); - KSet m = new KSet<>(); - - for(File i : getFolders()) - { - for(File j : i.listFiles()) - { - if(!j.getPath().contains(preferredFolder)) - { - continue; - } - - if(j.isFile() && j.getName().endsWith(".json")) - { - m.add(j.getName().replaceAll("\\Q.json\\E", "")); - } - - else if(j.isDirectory()) - { - for(File k : j.listFiles()) - { - if(k.isFile() && k.getName().endsWith(".json")) - { - m.add(j.getName() + "/" + k.getName().replaceAll("\\Q.json\\E", "")); - } - } - } - } - } - - KList v = new KList<>(m); - preferredKeys = v.toArray(new String[v.size()]); - return preferredKeys; - } - public String[] getPossibleKeys() { if(possibleKeys != null) @@ -134,6 +87,7 @@ public class ResourceLoader J.a(() -> Iris.verbose("Loading " + resourceTypeName + ": " + j.getPath())); t.setLoadKey(name); t.setLoadFile(j); + t.setLoader(manager); lock.unlock(); return t; } @@ -205,26 +159,10 @@ public class ResourceLoader { if(i.isDirectory()) { - for(File j : i.listFiles()) + if(i.getName().equals(folderName)) { - if(j.isDirectory() && j.getName().equals(folderName)) - { - folderCache.add(j); - break; - } - } - } - } - - if(preferredFolder != null) - { - for(File i : folderCache.copy()) - { - if(i.getParentFile().getName().equals(preferredFolder) || i.getParentFile().getParentFile().getName().equals(preferredFolder)) - { - folderCache.remove(i); - folderCache.add(0, i); - Iris.verbose("Prefering " + i.getPath() + " in the folder cache because we prefer " + preferredFolder); + folderCache.add(i); + break; } } } @@ -290,12 +228,6 @@ public class ResourceLoader return loadCache.containsKey(next); } - public void preferFolder(String name) - { - clearList(); - preferredFolder = name; - } - public void clearList() { lock.lock();