This commit is contained in:
Daniel Mills 2020-08-09 01:24:58 -04:00
parent e0714637ff
commit d3a4b0451d
11 changed files with 75 additions and 19 deletions

View File

@ -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);
}
}

View File

@ -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());

View File

@ -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)

View File

@ -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()

View File

@ -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();
}
}

View File

@ -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")

View File

@ -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())

View File

@ -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;
}
}

View File

@ -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();
}
}
}

View File

@ -20,6 +20,7 @@ public class ResourceLoader<T extends IrisRegistrant>
protected Class<? extends T> objectClass;
protected String cname;
protected IrisLock lock;
protected String preferredFolder = null;
public ResourceLoader(File root, String folderName, String resourceTypeName, Class<? extends T> objectClass)
{
@ -115,6 +116,18 @@ public class ResourceLoader<T extends IrisRegistrant>
}
}
}
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<T extends IrisRegistrant>
{
return loadCache.containsKey(next);
}
public void preferFolder(String name)
{
preferredFolder = name;
}
}

View File

@ -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