diff --git a/src/main/java/com/volmit/iris/IrisDataManager.java b/src/main/java/com/volmit/iris/IrisDataManager.java index 548b03c4b..a0de2ef53 100644 --- a/src/main/java/com/volmit/iris/IrisDataManager.java +++ b/src/main/java/com/volmit/iris/IrisDataManager.java @@ -73,6 +73,15 @@ public class IrisDataManager prod = pr; } + public void dump() + { + biomeLoader.clearCache(); + regionLoader.clearCache(); + dimensionLoader.clearCache(); + generatorLoader.clearCache(); + structureLoader.clearCache(); + } + private void writeExamples() { File examples = new File(dataFolder, "example"); @@ -148,4 +157,13 @@ public class IrisDataManager } } + + public void preferFolder(String name) + { + biomeLoader.preferFolder(name); + regionLoader.preferFolder(name); + dimensionLoader.preferFolder(name); + generatorLoader.preferFolder(name); + structureLoader.preferFolder(name); + } } \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/ProjectManager.java b/src/main/java/com/volmit/iris/ProjectManager.java index 17d9d7ef0..7764df751 100644 --- a/src/main/java/com/volmit/iris/ProjectManager.java +++ b/src/main/java/com/volmit/iris/ProjectManager.java @@ -82,6 +82,7 @@ public class ProjectManager public void open(MortarSender sender, String dimm, Runnable onDone) { + Iris.globaldata.dump(); IrisDimension d = Iris.globaldata.getDimensionLoader().load(dimm); J.attemptAsync(() -> { @@ -118,6 +119,7 @@ public class ProjectManager close(); } + Iris.globaldata.dump(); sender.sendMessage("Loading " + dimm + "..."); IrisChunkGenerator gx = new IrisChunkGenerator(dimm, IrisSettings.get().threads); currentProject = gx; @@ -148,6 +150,12 @@ public class ProjectManager sender.sendMessage("Generating " + Form.pc(v) + (derp ? " (Waiting on Server...)" : "")); J.sleep(3000); + + if(gx.isFailing()) + { + sender.sendMessage("Generation Failed!"); + return; + } } }); @@ -181,17 +189,14 @@ public class ProjectManager File folder = currentProject.getWorld().getWorldFolder(); Bukkit.unloadWorld(currentProject.getWorld(), false); currentProject = null; - Iris.globaldata.getObjectLoader().clearCache(); - Iris.globaldata.getBiomeLoader().clearCache(); - Iris.globaldata.getRegionLoader().clearCache(); - Iris.globaldata.getGeneratorLoader().clearCache(); - Iris.globaldata.getDimensionLoader().clearCache(); + Iris.globaldata.dump(); J.attemptAsync(() -> IO.delete(folder)); } } public File compilePackage(MortarSender sender, String dim, boolean obfuscate) { + Iris.globaldata.dump(); String dimm = dim; IrisDimension dimension = Iris.globaldata.getDimensionLoader().load(dimm); File folder = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey()); diff --git a/src/main/java/com/volmit/iris/gen/ContextualChunkGenerator.java b/src/main/java/com/volmit/iris/gen/ContextualChunkGenerator.java index 2585b72bc..6898592f6 100644 --- a/src/main/java/com/volmit/iris/gen/ContextualChunkGenerator.java +++ b/src/main/java/com/volmit/iris/gen/ContextualChunkGenerator.java @@ -116,7 +116,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements public IrisDimension loadDimension(String i) { - return getData().getDimensionLoader().load(i); + return (getData() == null ? Iris.globaldata : getData()).getDimensionLoader().load(i); } public IrisGenerator loadGenerator(String i) diff --git a/src/main/java/com/volmit/iris/gen/DimensionChunkGenerator.java b/src/main/java/com/volmit/iris/gen/DimensionChunkGenerator.java index 85425b0d3..7b65c495a 100644 --- a/src/main/java/com/volmit/iris/gen/DimensionChunkGenerator.java +++ b/src/main/java/com/volmit/iris/gen/DimensionChunkGenerator.java @@ -70,6 +70,8 @@ public abstract class DimensionChunkGenerator extends ContextualChunkGenerator dimensionName = "error-missing-dimension"; fail(new RuntimeException("Missing dimension folder/file in " + folder.getAbsolutePath())); } + + getData().preferFolder(getDimension().getLoadFile().getParentFile().getParentFile().getName()); } public IrisDimension getDimension() diff --git a/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java b/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java index 049abd790..f073d71df 100644 --- a/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java +++ b/src/main/java/com/volmit/iris/gen/IrisChunkGenerator.java @@ -174,6 +174,7 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon public void onHotloaded() { CNG.creates = 0; + getData().dump(); onHotload(); } @@ -220,6 +221,11 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon @Override public boolean shouldGenerateStructures() { + if(!isInitialized()) + { + return false; + } + return getDimension().isVanillaStructures(); } } diff --git a/src/main/java/com/volmit/iris/object/IrisGenerator.java b/src/main/java/com/volmit/iris/object/IrisGenerator.java index 2eddf0f7e..ea33aa808 100644 --- a/src/main/java/com/volmit/iris/object/IrisGenerator.java +++ b/src/main/java/com/volmit/iris/object/IrisGenerator.java @@ -70,7 +70,7 @@ public class IrisGenerator extends IrisRegistrant private InterpolationMethod interpolationFunction = InterpolationMethod.BICUBIC; @Required - @MinNumber(0) + @MinNumber(1) @MaxNumber(8192) @DontObfuscate @Desc("The interpolation distance scale (blocks) when two biomes use different heights but this same generator") diff --git a/src/main/java/com/volmit/iris/object/IrisObject.java b/src/main/java/com/volmit/iris/object/IrisObject.java index 984e97a48..166353ff1 100644 --- a/src/main/java/com/volmit/iris/object/IrisObject.java +++ b/src/main/java/com/volmit/iris/object/IrisObject.java @@ -166,7 +166,7 @@ public class IrisObject extends IrisRegistrant { BlockVector i = g.clone(); i = config.getRotation().rotate(i.clone(), spinx, spiny, spinz).clone(); - i = config.getTranslate().translate(i.clone()).clone(); + i = config.getTranslate().translate(i.clone(), config.getRotation(), spinx, spiny, spinz).clone(); BlockData data = blocks.get(g).clone(); if(placer.isPreventingDecay() && data instanceof Leaves && !((Leaves) data).isPersistent()) diff --git a/src/main/java/com/volmit/iris/object/IrisObjectTranslate.java b/src/main/java/com/volmit/iris/object/IrisObjectTranslate.java index 365b611d9..9840a0057 100644 --- a/src/main/java/com/volmit/iris/object/IrisObjectTranslate.java +++ b/src/main/java/com/volmit/iris/object/IrisObjectTranslate.java @@ -54,4 +54,14 @@ public class IrisObjectTranslate return i; } + + public BlockVector translate(BlockVector clone, IrisObjectRotation rotation, int sx, int sy, int sz) + { + if(canTranslate()) + { + return (BlockVector) clone.clone().add(rotation.rotate(new BlockVector(x, y, z), sx, sy, sz)); + } + + return clone; + } } diff --git a/src/main/java/com/volmit/iris/util/PregenJob.java b/src/main/java/com/volmit/iris/util/PregenJob.java index bbc1fc72c..d631477ca 100644 --- a/src/main/java/com/volmit/iris/util/PregenJob.java +++ b/src/main/java/com/volmit/iris/util/PregenJob.java @@ -115,14 +115,14 @@ public class PregenJob rcz = 0; mcaX++; - if(mcaX > mca(max() / 16)) + if(mcaX > mca(Math.floorDiv(max(), 16))) { - mcaX = mca(min() / 16); + mcaX = mca(Math.floorDiv(min(), 16)); mcaZ++; - if(mcaZ > mca(max() / 16)) + if(mcaZ > mca(Math.floorDiv(max(), 16))) { - mcaZ = mca(min() / 16); + mcaZ = mca(Math.floorDiv(min(), 16)); completed = true; stop(); Iris.info("Pregen Completed!"); @@ -136,13 +136,9 @@ public class PregenJob i.unload(true); } - world.save(); - + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "save-all"); onDone.run(); - return; } - - world.save(); } } } diff --git a/src/main/java/com/volmit/iris/util/ResourceLoader.java b/src/main/java/com/volmit/iris/util/ResourceLoader.java index a45f60843..aa6600721 100644 --- a/src/main/java/com/volmit/iris/util/ResourceLoader.java +++ b/src/main/java/com/volmit/iris/util/ResourceLoader.java @@ -20,6 +20,7 @@ public class ResourceLoader protected Class objectClass; protected String cname; protected IrisLock lock; + protected String preferredFolder = null; public ResourceLoader(File root, String folderName, String resourceTypeName, Class objectClass) { @@ -115,6 +116,18 @@ public class ResourceLoader } } } + + if(preferredFolder != null) + { + for(File i : folderCache.copy()) + { + if(i.getParentFile().getName().equals(preferredFolder)) + { + folderCache.remove(i); + folderCache.add(0, i); + } + } + } } return folderCache; @@ -171,4 +184,9 @@ public class ResourceLoader { return loadCache.containsKey(next); } + + public void preferFolder(String name) + { + preferredFolder = name; + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 66a220612..2a4a6333c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,6 +3,7 @@ version: ${project.version} main: com.volmit.iris.Iris load: STARTUP commands: - iris: -api-version: 1.15 + iris: + aliases: [ir, irs] +api-version: 1.16 hotload-dependencies: false \ No newline at end of file