Localdata

This commit is contained in:
Daniel Mills 2020-08-07 03:56:30 -04:00
parent 60324c041c
commit e5384509cf
21 changed files with 189 additions and 131 deletions

View File

@ -54,7 +54,7 @@ public class Iris extends MortarPlugin implements BoardProvider
{ {
public static KList<GroupedExecutor> executors = new KList<>(); public static KList<GroupedExecutor> executors = new KList<>();
public static Iris instance; public static Iris instance;
public static IrisDataManager data; public static IrisDataManager globaldata;
public static ProjectManager proj; public static ProjectManager proj;
public static IrisHotloadManager hotloader; public static IrisHotloadManager hotloader;
public static WandController wand; public static WandController wand;
@ -103,7 +103,7 @@ public class Iris extends MortarPlugin implements BoardProvider
lock = new IrisLock("Iris"); lock = new IrisLock("Iris");
instance = this; instance = this;
hotloader = new IrisHotloadManager(); hotloader = new IrisHotloadManager();
data = new IrisDataManager(getDataFolder()); globaldata = new IrisDataManager(getDataFolder());
wand = new WandController(); wand = new WandController();
postProcessors = loadPostProcessors(); postProcessors = loadPostProcessors();
proj = new ProjectManager(); proj = new ProjectManager();
@ -188,7 +188,7 @@ public class Iris extends MortarPlugin implements BoardProvider
lines.add(ChatColor.GREEN + "Generators" + ChatColor.GRAY + ": " + Form.f(CNG.creates)); lines.add(ChatColor.GREEN + "Generators" + ChatColor.GRAY + ": " + Form.f(CNG.creates));
lines.add(ChatColor.GREEN + "Noise" + ChatColor.GRAY + ": " + Form.f((int) hits.getAverage())); lines.add(ChatColor.GREEN + "Noise" + ChatColor.GRAY + ": " + Form.f((int) hits.getAverage()));
lines.add(ChatColor.GREEN + "Parallax Chunks" + ChatColor.GRAY + ": " + Form.f((int) g.getParallaxMap().getLoadedChunks().size())); lines.add(ChatColor.GREEN + "Parallax Chunks" + ChatColor.GRAY + ": " + Form.f((int) g.getParallaxMap().getLoadedChunks().size()));
lines.add(ChatColor.GREEN + "Objects" + ChatColor.GRAY + ": " + Form.f(Iris.data.getObjectLoader().count())); lines.add(ChatColor.GREEN + "Objects" + ChatColor.GRAY + ": " + Form.f(g.getData().getObjectLoader().count()));
lines.add(ChatColor.GREEN + "Memory" + ChatColor.GRAY + ": " + mem); lines.add(ChatColor.GREEN + "Memory" + ChatColor.GRAY + ": " + mem);
if(er != null && b != null) if(er != null && b != null)

View File

@ -53,7 +53,7 @@ public class IrisHotloadManager
{ {
watchers.clear(); watchers.clear();
Iris.success("Hotloading Iris (" + c + " File" + (c == 1 ? "" : "s") + " changed)"); Iris.success("Hotloading Iris (" + c + " File" + (c == 1 ? "" : "s") + " changed)");
Iris.data.hotloaded(); Iris.globaldata.hotloaded();
ch.onHotloaded(); ch.onHotloaded();
} }
}); });

View File

@ -58,7 +58,7 @@ public class ProjectManager
public void open(MortarSender sender, String dimm, Runnable onDone) public void open(MortarSender sender, String dimm, Runnable onDone)
{ {
IrisDimension d = Iris.data.getDimensionLoader().load(dimm); IrisDimension d = Iris.globaldata.getDimensionLoader().load(dimm);
J.attemptAsync(() -> J.attemptAsync(() ->
{ {
try try
@ -155,11 +155,11 @@ public class ProjectManager
File folder = currentProject.getWorld().getWorldFolder(); File folder = currentProject.getWorld().getWorldFolder();
Bukkit.unloadWorld(currentProject.getWorld(), false); Bukkit.unloadWorld(currentProject.getWorld(), false);
currentProject = null; currentProject = null;
Iris.data.getObjectLoader().clearCache(); Iris.globaldata.getObjectLoader().clearCache();
Iris.data.getBiomeLoader().clearCache(); Iris.globaldata.getBiomeLoader().clearCache();
Iris.data.getRegionLoader().clearCache(); Iris.globaldata.getRegionLoader().clearCache();
Iris.data.getGeneratorLoader().clearCache(); Iris.globaldata.getGeneratorLoader().clearCache();
Iris.data.getDimensionLoader().clearCache(); Iris.globaldata.getDimensionLoader().clearCache();
J.attemptAsync(() -> IO.delete(folder)); J.attemptAsync(() -> IO.delete(folder));
} }
} }
@ -167,7 +167,7 @@ public class ProjectManager
public void compilePackage(MortarSender sender, String dim, boolean obfuscate) public void compilePackage(MortarSender sender, String dim, boolean obfuscate)
{ {
String dimm = dim; String dimm = dim;
IrisDimension dimension = Iris.data.getDimensionLoader().load(dimm); IrisDimension dimension = Iris.globaldata.getDimensionLoader().load(dimm);
File folder = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey()); File folder = new File(Iris.instance.getDataFolder(), "exports/" + dimension.getLoadKey());
folder.mkdirs(); folder.mkdirs();
Iris.info("Packaging Dimension " + dimension.getName() + " " + (obfuscate ? "(Obfuscated)" : "")); Iris.info("Packaging Dimension " + dimension.getName() + " " + (obfuscate ? "(Obfuscated)" : ""));
@ -175,11 +175,11 @@ public class ProjectManager
KSet<IrisBiome> biomes = new KSet<>(); KSet<IrisBiome> biomes = new KSet<>();
KSet<IrisStructure> structures = new KSet<>(); KSet<IrisStructure> structures = new KSet<>();
KSet<IrisGenerator> generators = new KSet<>(); KSet<IrisGenerator> generators = new KSet<>();
dimension.getRegions().forEach((i) -> regions.add(Iris.data.getRegionLoader().load(i))); dimension.getRegions().forEach((i) -> regions.add(Iris.globaldata.getRegionLoader().load(i)));
regions.forEach((i) -> biomes.addAll(i.getAllBiomes())); regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null)));
biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator()))); biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null))));
regions.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure()))); regions.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null))));
biomes.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure()))); biomes.forEach((i) -> i.getStructures().forEach((j) -> structures.add(j.getStructure(null))));
KMap<String, String> renameObjects = new KMap<>(); KMap<String, String> renameObjects = new KMap<>();
String a = ""; String a = "";
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
@ -242,7 +242,7 @@ public class ProjectManager
{ {
try try
{ {
File f = Iris.data.getObjectLoader().findFile(lookupObjects.get(k).get(0)); File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0));
IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); IO.copyFile(f, new File(folder, "objects/" + k + ".iob"));
gb.append(IO.hash(f)); gb.append(IO.hash(f));
} }
@ -257,7 +257,7 @@ public class ProjectManager
{ {
try try
{ {
File f = Iris.data.getObjectLoader().findFile(lookupObjects.get(k).get(0)); File f = Iris.globaldata.getObjectLoader().findFile(lookupObjects.get(k).get(0));
IO.copyFile(f, new File(folder, "objects/" + k + ".iob")); IO.copyFile(f, new File(folder, "objects/" + k + ".iob"));
gb.append(IO.hash(f)); gb.append(IO.hash(f));
} }

View File

@ -54,7 +54,7 @@ public class CommandIrisGoto extends MortarCommand
else else
{ {
biome2 = Iris.data.getBiomeLoader().load(args[1]); biome2 = g.loadBiome(args[1]);
if(biome2 == null) if(biome2 == null)
{ {
@ -72,7 +72,7 @@ public class CommandIrisGoto extends MortarCommand
} }
} }
IrisBiome biome = Iris.data.getBiomeLoader().load(args[0]); IrisBiome biome = g.loadBiome(args[0]);
if(biome == null) if(biome == null)
{ {

View File

@ -21,7 +21,7 @@ public class CommandIrisStudioList extends MortarCommand
public boolean handle(MortarSender sender, String[] args) public boolean handle(MortarSender sender, String[] args)
{ {
int m = 0; int m = 0;
for(File i : Iris.data.getDimensionLoader().getFolders()) for(File i : Iris.globaldata.getDimensionLoader().getFolders())
{ {
for(File j : i.listFiles()) for(File j : i.listFiles())
{ {
@ -30,7 +30,7 @@ public class CommandIrisStudioList extends MortarCommand
try try
{ {
m++; m++;
IrisDimension d = Iris.data.getDimensionLoader().load(j.getName().replaceAll("\\Q.json\\E", "")); IrisDimension d = Iris.globaldata.getDimensionLoader().load(j.getName().replaceAll("\\Q.json\\E", ""));
sender.sendMessage("- " + d.getLoadKey() + " (" + d.getName() + ")"); sender.sendMessage("- " + d.getLoadKey() + " (" + d.getName() + ")");
} }
catch(Throwable e) catch(Throwable e)

View File

@ -183,7 +183,7 @@ public abstract class BiomeChunkGenerator extends DimensionChunkGenerator
for(String i : dim.getRegions()) for(String i : dim.getRegions())
{ {
IrisRegion r = Iris.data.getRegionLoader().load(i); IrisRegion r = loadRegion(i);
if(r != null) if(r != null)
{ {
@ -202,8 +202,8 @@ public abstract class BiomeChunkGenerator extends DimensionChunkGenerator
if(!touch.contains(next)) if(!touch.contains(next))
{ {
touch.add(next); touch.add(next);
IrisBiome biome = Iris.data.getBiomeLoader().load(next); IrisBiome biome = loadBiome(next);
biome.getGenerators().forEach((i) -> registerGenerator(i.getCachedGenerator(), dim)); biome.getGenerators().forEach((i) -> registerGenerator(i.getCachedGenerator(this), dim));
loadQueue.addAll(biome.getChildren()); loadQueue.addAll(biome.getChildren());
} }
} }
@ -220,11 +220,11 @@ public abstract class BiomeChunkGenerator extends DimensionChunkGenerator
{ {
if(!getDimension().getFocus().equals("")) if(!getDimension().getFocus().equals(""))
{ {
IrisBiome biome = Iris.data.getBiomeLoader().load(getDimension().getFocus()); IrisBiome biome = loadBiome(getDimension().getFocus());
for(String i : getDimension().getRegions()) for(String i : getDimension().getRegions())
{ {
IrisRegion reg = Iris.data.getRegionLoader().load(i); IrisRegion reg = loadRegion(i);
if(reg.getLandBiomes().contains(biome.getLoadKey())) if(reg.getLandBiomes().contains(biome.getLoadKey()))
{ {

View File

@ -3,7 +3,6 @@ package com.volmit.iris.gen;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.InvertedBiomeGrid; import com.volmit.iris.util.InvertedBiomeGrid;
import com.volmit.iris.util.RNG; import com.volmit.iris.util.RNG;
@ -93,7 +92,7 @@ public abstract class CeilingChunkGenerator extends PostBlockChunkGenerator
return null; return null;
} }
IrisDimension c = Iris.data.getDimensionLoader().load(getFloorDimension().getCeiling()); IrisDimension c = loadDimension(getFloorDimension().getCeiling());
if(c != null) if(c != null)
{ {

View File

@ -1,5 +1,6 @@
package com.volmit.iris.gen; package com.volmit.iris.gen;
import java.io.File;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
@ -22,7 +23,14 @@ import org.bukkit.generator.ChunkGenerator;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.IrisContext; import com.volmit.iris.IrisContext;
import com.volmit.iris.IrisDataManager;
import com.volmit.iris.IrisMetrics; import com.volmit.iris.IrisMetrics;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisGenerator;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.ChronoLatch; import com.volmit.iris.util.ChronoLatch;
@ -38,6 +46,7 @@ import net.md_5.bungee.api.ChatColor;
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public abstract class ContextualChunkGenerator extends ChunkGenerator implements Listener public abstract class ContextualChunkGenerator extends ChunkGenerator implements Listener
{ {
private IrisDataManager data;
protected boolean failing; protected boolean failing;
protected int task; protected int task;
protected boolean dev; protected boolean dev;
@ -86,6 +95,41 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
protected abstract void onPlayerLeft(Player p); protected abstract void onPlayerLeft(Player p);
public IrisRegion loadRegion(String i)
{
return getData().getRegionLoader().load(i);
}
public IrisBiome loadBiome(String i)
{
return getData().getBiomeLoader().load(i);
}
public IrisStructure loadStructure(String i)
{
return getData().getStructureLoader().load(i);
}
public IrisObject loadObject(String i)
{
return getData().getObjectLoader().load(i);
}
public IrisDimension loadDimension(String i)
{
return getData().getDimensionLoader().load(i);
}
public IrisGenerator loadGenerator(String i)
{
return getData().getGeneratorLoader().load(i);
}
public IrisDataManager getData()
{
return isDev() ? Iris.globaldata : data;
}
private void init(World world, RNG rng) private void init(World world, RNG rng)
{ {
if(initialized) if(initialized)
@ -93,6 +137,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
return; return;
} }
data = new IrisDataManager(new File(getWorld().getWorldFolder(), "iris"));
this.world = world; this.world = world;
this.masterRandom = new RNG(world.getSeed()); this.masterRandom = new RNG(world.getSeed());
metrics = new IrisMetrics(128); metrics = new IrisMetrics(128);

View File

@ -31,7 +31,7 @@ public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
public IrisDimension getDimension() public IrisDimension getDimension()
{ {
IrisDimension d = Iris.data.getDimensionLoader().load(dimensionName); IrisDimension d = loadDimension(dimensionName);
if(d == null) if(d == null)
{ {
@ -43,11 +43,11 @@ public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
protected BiomeResult focus() protected BiomeResult focus()
{ {
IrisBiome biome = Iris.data.getBiomeLoader().load(getDimension().getFocus()); IrisBiome biome = loadBiome(getDimension().getFocus());
for(String i : getDimension().getRegions()) for(String i : getDimension().getRegions())
{ {
IrisRegion reg = Iris.data.getRegionLoader().load(i); IrisRegion reg = loadRegion(i);
if(reg.getLandBiomes().contains(biome.getLoadKey())) if(reg.getLandBiomes().contains(biome.getLoadKey()))
{ {

View File

@ -35,6 +35,12 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
lock = new IrisLock("IrisChunkGenerator"); lock = new IrisLock("IrisChunkGenerator");
} }
public IrisChunkGenerator(String dimensionName)
{
super(dimensionName, 16);
lock = new IrisLock("IrisChunkGenerator");
}
@Override @Override
protected void onGenerate(RNG random, int x, int z, ChunkData data, BiomeGrid grid) protected void onGenerate(RNG random, int x, int z, ChunkData data, BiomeGrid grid)
{ {
@ -149,7 +155,7 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
public long guessMemoryUsage() public long guessMemoryUsage()
{ {
long bytes = 1024 * 1024 * (8 + (getThreads() / 4)); long bytes = 1024 * 1024 * (8 + (getThreads() / 3));
for(AtomicRegionData i : parallaxMap.getLoadedRegions().values()) for(AtomicRegionData i : parallaxMap.getLoadedRegions().values())
{ {
@ -164,7 +170,7 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
bytes += parallaxMap.getLoadedChunks().size() * 256 * 4 * 460; bytes += parallaxMap.getLoadedChunks().size() * 256 * 4 * 460;
bytes += ceilingParallaxMap.getLoadedChunks().size() * 256 * 4 * 460; bytes += ceilingParallaxMap.getLoadedChunks().size() * 256 * 4 * 460;
bytes += getSliverBuffer() * 220; bytes += getSliverBuffer() * 220;
bytes += 752 * Iris.data.getObjectLoader().getTotalStorage(); bytes += 823 * getData().getObjectLoader().getTotalStorage();
return bytes; return bytes;
} }
@ -190,6 +196,6 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
@Override @Override
public boolean shouldGenerateStructures() public boolean shouldGenerateStructures()
{ {
return true; return false;
} }
} }

View File

@ -5,7 +5,6 @@ import java.io.IOException;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicSliver; import com.volmit.iris.gen.atomics.AtomicSliver;
import com.volmit.iris.gen.atomics.AtomicSliverMap; import com.volmit.iris.gen.atomics.AtomicSliverMap;
import com.volmit.iris.gen.atomics.AtomicWorldData; import com.volmit.iris.gen.atomics.AtomicWorldData;
@ -194,7 +193,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
getMetrics().getParallax().put(p.getMilliseconds()); getMetrics().getParallax().put(p.getMilliseconds());
super.onPostParallaxPostGenerate(random, x, z, data, grid, height, biomeMap); super.onPostParallaxPostGenerate(random, x, z, data, grid, height, biomeMap);
getParallaxMap().clean(ticks); getParallaxMap().clean(ticks);
Iris.data.getObjectLoader().clean(); getData().getObjectLoader().clean();
} }
public IrisStructureResult getStructure(int x, int y, int z) public IrisStructureResult getStructure(int x, int y, int z)
@ -209,13 +208,13 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
{ {
if(i.getHeight() > -1) if(i.getHeight() > -1)
{ {
if(y >= i.getHeight() && y <= i.getHeight() + (i.getStructure().getGridHeight() * i.getStructure().getMaxLayers())) if(y >= i.getHeight() && y <= i.getHeight() + (i.getStructure(this).getGridHeight() * i.getStructure(this).getMaxLayers()))
{ {
p.add(i); p.add(i);
} }
} }
else if(y >= h && y <= i.getStructure().getGridHeight() + h) else if(y >= h && y <= i.getStructure(this).getGridHeight() + h)
{ {
p.add(i); p.add(i);
} }
@ -225,13 +224,13 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
{ {
if(i.getHeight() > -1) if(i.getHeight() > -1)
{ {
if(y >= i.getHeight() && y <= i.getHeight() + (i.getStructure().getGridHeight() * i.getStructure().getMaxLayers())) if(y >= i.getHeight() && y <= i.getHeight() + (i.getStructure(this).getGridHeight() * i.getStructure(this).getMaxLayers()))
{ {
p.add(i); p.add(i);
} }
} }
else if(y >= h && y <= i.getStructure().getGridHeight() + h) else if(y >= h && y <= i.getStructure(this).getGridHeight() + h)
{ {
p.add(i); p.add(i);
} }
@ -244,12 +243,12 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
continue; continue;
} }
int hv = (i.getHeight() == -1 ? 0 : i.getHeight()) + (Math.floorDiv(y, i.getStructure().getGridHeight()) * i.getStructure().getGridHeight()); int hv = (i.getHeight() == -1 ? 0 : i.getHeight()) + (Math.floorDiv(y, i.getStructure(this).getGridHeight()) * i.getStructure(this).getGridHeight());
TileResult tile = i.getStructure().getTile(ro, Math.floorDiv(i.gridSize(), x) * i.gridSize(), hv, Math.floorDiv(i.gridSize(), z) * i.gridSize()); TileResult tile = i.getStructure(this).getTile(ro, Math.floorDiv(i.gridSize(this), x) * i.gridSize(this), hv, Math.floorDiv(i.gridSize(this), z) * i.gridSize(this));
if(tile != null && tile.getTile() != null) if(tile != null && tile.getTile() != null)
{ {
return new IrisStructureResult(tile.getTile(), i.getStructure()); return new IrisStructureResult(tile.getTile(), i.getStructure(this));
} }
} }
@ -259,7 +258,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
protected void onGenerateParallax(RNG random, int x, int z) protected void onGenerateParallax(RNG random, int x, int z)
{ {
String key = "par." + x + "." + "z"; String key = "par." + x + "." + "z";
ChunkPosition rad = getDimension().getParallaxSize(); ChunkPosition rad = getDimension().getParallaxSize(this);
KList<NastyRunnable> q = new KList<>(); KList<NastyRunnable> q = new KList<>();
for(int ii = x - (rad.getX() / 2); ii <= x + (rad.getX() / 2); ii++) for(int ii = x - (rad.getX() / 2); ii <= x + (rad.getX() / 2); ii++)
@ -299,7 +298,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
continue; continue;
} }
if(k.getRealSideA().contains(sa.getLoadKey()) && k.getRealSideB().contains(sb.getLoadKey())) if(k.getRealSideA(this).contains(sa.getLoadKey()) && k.getRealSideB(this).contains(sb.getLoadKey()))
{ {
for(IrisObjectPlacement m : k.getObjects()) for(IrisObjectPlacement m : k.getObjects())
{ {
@ -321,18 +320,20 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
for(IrisStructurePlacement k : r.getStructures()) for(IrisStructurePlacement k : r.getStructures())
{ {
lockq.lock();
q.add(() -> q.add(() ->
{ {
k.place(this, random, i, j); k.place(this, random.nextParallelRNG(2228), i, j);
}); });
lockq.unlock(); lockq.unlock();
} }
for(IrisStructurePlacement k : b.getStructures()) for(IrisStructurePlacement k : b.getStructures())
{ {
lockq.lock();
q.add(() -> q.add(() ->
{ {
k.place(this, random, i, j); k.place(this, random.nextParallelRNG(-22228), i, j);
}); });
lockq.unlock(); lockq.unlock();
} }
@ -399,7 +400,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
for(int i = 0; i < o.getTriesForChunk(rng); i++) for(int i = 0; i < o.getTriesForChunk(rng); i++)
{ {
rng = rng.nextParallelRNG((i * 3 + 8) - 23040); rng = rng.nextParallelRNG((i * 3 + 8) - 23040);
o.getSchematic(rng).place((x * 16) + rng.nextInt(16), (z * 16) + rng.nextInt(16), this, o, rng); o.getSchematic(this, rng).place((x * 16) + rng.nextInt(16), (z * 16) + rng.nextInt(16), this, o, rng);
} }
} }
@ -417,7 +418,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
continue; continue;
} }
o.getSchematic(rng).place(xx, res.get(rng.nextParallelRNG(29345 * (i + 234)).nextInt(res.size())).getFloor() + 2, zz, this, o, rng); o.getSchematic(this, rng).place(xx, res.get(rng.nextParallelRNG(29345 * (i + 234)).nextInt(res.size())).getFloor() + 2, zz, this, o, rng);
} }
} }

View File

@ -1,5 +1,6 @@
package com.volmit.iris.gen.layer; package com.volmit.iris.gen.layer;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.object.InferredType; import com.volmit.iris.object.InferredType;
import com.volmit.iris.object.IrisRegion; import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.util.RarityCellGenerator; import com.volmit.iris.util.RarityCellGenerator;
@ -22,14 +23,14 @@ public class BiomeDataProvider
generator = new RarityCellGenerator(rng.nextParallelRNG(4645079 + (type.ordinal() * 23845))); generator = new RarityCellGenerator(rng.nextParallelRNG(4645079 + (type.ordinal() * 23845)));
} }
public BiomeResult generatePureData(double bx, double bz, int rawX, int rawZ, IrisRegion regionData) public BiomeResult generatePureData(ContextualChunkGenerator g, double bx, double bz, int rawX, int rawZ, IrisRegion regionData)
{ {
getGenerator().setShuffle(regionData.getBiomeShuffle()); getGenerator().setShuffle(regionData.getBiomeShuffle());
return layer.generateBiomeData(bx, bz, regionData, getGenerator(), regionData.getBiomes(getType()), getType()); return layer.generateBiomeData(bx, bz, regionData, getGenerator(), regionData.getBiomes(g, getType()), getType());
} }
public BiomeResult generateData(double bx, double bz, int rawX, int rawZ, IrisRegion regionData) public BiomeResult generateData(ContextualChunkGenerator g, double bx, double bz, int rawX, int rawZ, IrisRegion regionData)
{ {
return layer.generateImpureData(rawX, rawZ, getType(), regionData, generatePureData(bx, bz, rawX, rawZ, regionData)); return layer.generateImpureData(rawX, rawZ, getType(), regionData, generatePureData(g, bx, bz, rawX, rawZ, regionData));
} }
} }

View File

@ -59,7 +59,7 @@ public class GenLayerBiome extends GenLayer
double z = bz / iris.getDimension().getBiomeZoom(); double z = bz / iris.getDimension().getBiomeZoom();
String regionId = iris.getDimension().getRegions().get(regionGenerator.getIndex(x, z, iris.getDimension().getRegions().size())); String regionId = iris.getDimension().getRegions().get(regionGenerator.getIndex(x, z, iris.getDimension().getRegions().size()));
return Iris.data.getRegionLoader().load(regionId); return iris.loadRegion(regionId);
} }
public BiomeResult generateData(double bx, double bz, int rawX, int rawZ) public BiomeResult generateData(double bx, double bz, int rawX, int rawZ)
@ -69,7 +69,7 @@ public class GenLayerBiome extends GenLayer
public BiomeResult generateData(InferredType type, double bx, double bz, int rawX, int rawZ, IrisRegion regionData) public BiomeResult generateData(InferredType type, double bx, double bz, int rawX, int rawZ, IrisRegion regionData)
{ {
return getProvider(type).generateData(bx, bz, rawX, rawZ, regionData); return getProvider(type).generateData(iris, bx, bz, rawX, rawZ, regionData);
} }
public BiomeDataProvider getProvider(InferredType type) public BiomeDataProvider getProvider(InferredType type)
@ -147,7 +147,7 @@ public class GenLayerBiome extends GenLayer
{ {
if(i.getType().equals(type) && i.isRidge(rng, rawX, rawZ)) if(i.getType().equals(type) && i.isRidge(rng, rawX, rawZ))
{ {
return new BiomeResult(Iris.data.getBiomeLoader().load(i.getBiome()).infer(i.getAs(), type), 0.5); return new BiomeResult(iris.loadBiome(i.getBiome()).infer(i.getAs(), type), 0.5);
} }
} }
@ -155,7 +155,7 @@ public class GenLayerBiome extends GenLayer
{ {
if(i.getType().equals(type) && i.isSpot(rng, rawX, rawZ)) if(i.getType().equals(type) && i.isSpot(rng, rawX, rawZ))
{ {
return new BiomeResult(Iris.data.getBiomeLoader().load(i.getBiome()).infer(i.getAs(), type), 0.5); return new BiomeResult(iris.loadBiome(i.getBiome()).infer(i.getAs(), type), 0.5);
} }
} }
@ -179,10 +179,10 @@ public class GenLayerBiome extends GenLayer
if(parent.getDistance() > regionData.getBiomeImplosionRatio()) if(parent.getDistance() > regionData.getBiomeImplosionRatio())
{ {
if(!parent.getBiome().getRealChildren().isEmpty()) if(!parent.getBiome().getRealChildren(iris).isEmpty())
{ {
RarityCellGenerator childCell = parent.getBiome().getChildrenGenerator(rng, 123, parentCell.getCellScale() * parent.getBiome().getChildShrinkFactor()); RarityCellGenerator childCell = parent.getBiome().getChildrenGenerator(rng, 123, parentCell.getCellScale() * parent.getBiome().getChildShrinkFactor());
KList<IrisBiome> chx = parent.getBiome().getRealChildren().copy(); KList<IrisBiome> chx = parent.getBiome().getRealChildren(iris).copy();
chx.add(parent.getBiome()); chx.add(parent.getBiome());
IrisBiome biome = childCell.get(x, z, chx); IrisBiome biome = childCell.get(x, z, chx);
biome.setInferredType(parent.getBiome().getInferredType()); biome.setInferredType(parent.getBiome().getInferredType());

View File

@ -4,6 +4,7 @@ import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.RarityCellGenerator; import com.volmit.iris.util.RarityCellGenerator;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
@ -111,13 +112,13 @@ public class IrisBiome extends IrisRegistrant
} }
public double getHeight(double x, double z, long seed) public double getHeight(ContextualChunkGenerator xg, double x, double z, long seed)
{ {
double height = 0; double height = 0;
for(IrisBiomeGeneratorLink i : generators) for(IrisBiomeGeneratorLink i : generators)
{ {
height += i.getHeight(x, z, seed); height += i.getHeight(xg, x, z, seed);
} }
return Math.max(0, Math.min(height, 255)); return Math.max(0, Math.min(height, 255));
@ -380,7 +381,7 @@ public class IrisBiome extends IrisRegistrant
return biomeSkyScatter.get(getBiomeGenerator(rng).fit(0, biomeSkyScatter.size() - 1, x, y, z)); return biomeSkyScatter.get(getBiomeGenerator(rng).fit(0, biomeSkyScatter.size() - 1, x, y, z));
} }
public KList<IrisBiome> getRealChildren() public KList<IrisBiome> getRealChildren(ContextualChunkGenerator g)
{ {
return realChildren.aquire(() -> return realChildren.aquire(() ->
{ {
@ -388,14 +389,14 @@ public class IrisBiome extends IrisRegistrant
for(String i : getChildren()) for(String i : getChildren())
{ {
realChildren.add(Iris.data.getBiomeLoader().load(i)); realChildren.add(g != null ? g.loadBiome(i) : Iris.globaldata.getBiomeLoader().load(i));
} }
return realChildren; return realChildren;
}); });
} }
public KList<String> getAllChildren(int limit) public KList<String> getAllChildren(ContextualChunkGenerator g, int limit)
{ {
KSet<String> m = new KSet<>(); KSet<String> m = new KSet<>();
m.addAll(getChildren()); m.addAll(getChildren());
@ -405,9 +406,9 @@ public class IrisBiome extends IrisRegistrant
{ {
for(String i : getChildren()) for(String i : getChildren())
{ {
IrisBiome b = Iris.data.getBiomeLoader().load(i); IrisBiome b = g != null ? g.loadBiome(i) : Iris.globaldata.getBiomeLoader().load(i);
int l = limit; int l = limit;
m.addAll(b.getAllChildren(l)); m.addAll(b.getAllChildren(g, l));
} }
} }

View File

@ -1,6 +1,7 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@ -31,11 +32,11 @@ public class IrisBiomeGeneratorLink
} }
public IrisGenerator getCachedGenerator() public IrisGenerator getCachedGenerator(ContextualChunkGenerator g)
{ {
return gen.aquire(() -> return gen.aquire(() ->
{ {
IrisGenerator gen = Iris.data.getGeneratorLoader().load(getGenerator()); IrisGenerator gen = g != null ? g.loadGenerator(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator());
if(gen == null) if(gen == null)
{ {
@ -46,9 +47,9 @@ public class IrisBiomeGeneratorLink
}); });
} }
public double getHeight(double x, double z, long seed) public double getHeight(ContextualChunkGenerator xg, double x, double z, long seed)
{ {
double g = getCachedGenerator().getHeight(x, z, seed); double g = getCachedGenerator(xg).getHeight(x, z, seed);
g = g < 0 ? 0 : g; g = g < 0 ? 0 : g;
g = g > 1 ? 1 : g; g = g > 1 ? 1 : g;

View File

@ -1,6 +1,6 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris; import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@ -36,17 +36,17 @@ public class IrisBiomeMutation
private transient AtomicCache<KList<String>> sideACache = new AtomicCache<>(); private transient AtomicCache<KList<String>> sideACache = new AtomicCache<>();
private transient AtomicCache<KList<String>> sideBCache = new AtomicCache<>(); private transient AtomicCache<KList<String>> sideBCache = new AtomicCache<>();
public KList<String> getRealSideA() public KList<String> getRealSideA(ContextualChunkGenerator xg)
{ {
return sideACache.aquire(() -> processList(getSideA())); return sideACache.aquire(() -> processList(xg, getSideA()));
} }
public KList<String> getRealSideB() public KList<String> getRealSideB(ContextualChunkGenerator xg)
{ {
return sideBCache.aquire(() -> processList(getSideB())); return sideBCache.aquire(() -> processList(xg, getSideB()));
} }
public KList<String> processList(KList<String> s) public KList<String> processList(ContextualChunkGenerator xg, KList<String> s)
{ {
KSet<String> r = new KSet<>(); KSet<String> r = new KSet<>();
@ -56,14 +56,14 @@ public class IrisBiomeMutation
if(q.startsWith("^")) if(q.startsWith("^"))
{ {
r.addAll(Iris.data.getRegionLoader().load(q.substring(1)).getLandBiomes()); r.addAll(xg.loadRegion(q.substring(1)).getLandBiomes());
continue; continue;
} }
else if(q.startsWith("*")) else if(q.startsWith("*"))
{ {
String name = q.substring(1); String name = q.substring(1);
r.addAll(Iris.data.getBiomeLoader().load(name).getAllChildren(7)); r.addAll(xg.loadBiome(name).getAllChildren(xg, 7));
} }
else if(q.startsWith("!")) else if(q.startsWith("!"))
@ -74,7 +74,7 @@ public class IrisBiomeMutation
else if(q.startsWith("!*")) else if(q.startsWith("!*"))
{ {
String name = q.substring(2); String name = q.substring(2);
r.removeAll(Iris.data.getBiomeLoader().load(name).getAllChildren(7)); r.removeAll(xg.loadBiome(name).getAllChildren(xg, 7));
} }
else else

View File

@ -6,6 +6,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.util.BlockVector; import org.bukkit.util.BlockVector;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.PostBlockChunkGenerator; import com.volmit.iris.gen.PostBlockChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
@ -548,31 +549,31 @@ public class IrisDimension extends IrisRegistrant
return cosr.aquire(() -> Math.cos(getDimensionAngle())); return cosr.aquire(() -> Math.cos(getDimensionAngle()));
} }
public KList<IrisRegion> getAllRegions() public KList<IrisRegion> getAllRegions(ContextualChunkGenerator g)
{ {
KList<IrisRegion> r = new KList<>(); KList<IrisRegion> r = new KList<>();
for(String i : getRegions()) for(String i : getRegions())
{ {
r.add(Iris.data.getRegionLoader().load(i)); r.add(g != null ? g.loadRegion(i) : Iris.globaldata.getRegionLoader().load(i));
} }
return r; return r;
} }
public KList<IrisBiome> getAllBiomes() public KList<IrisBiome> getAllBiomes(ContextualChunkGenerator g)
{ {
KList<IrisBiome> r = new KList<>(); KList<IrisBiome> r = new KList<>();
for(IrisRegion i : getAllRegions()) for(IrisRegion i : getAllRegions(g))
{ {
r.addAll(i.getAllBiomes()); r.addAll(i.getAllBiomes(g));
} }
return r; return r;
} }
public ChunkPosition getParallaxSize() public ChunkPosition getParallaxSize(ContextualChunkGenerator g)
{ {
return parallaxSize.aquire(() -> return parallaxSize.aquire(() ->
{ {
@ -580,8 +581,8 @@ public class IrisDimension extends IrisRegistrant
int z = 0; int z = 0;
KSet<String> objects = new KSet<>(); KSet<String> objects = new KSet<>();
KList<IrisRegion> r = getAllRegions(); KList<IrisRegion> r = getAllRegions(g);
KList<IrisBiome> b = getAllBiomes(); KList<IrisBiome> b = getAllBiomes(g);
for(IrisBiome i : b) for(IrisBiome i : b)
{ {
@ -595,7 +596,7 @@ public class IrisDimension extends IrisRegistrant
{ {
try try
{ {
BlockVector bv = IrisObject.sampleSize(Iris.data.getObjectLoader().findFile(i)); BlockVector bv = IrisObject.sampleSize(g.getData().getObjectLoader().findFile(i));
x = bv.getBlockX() > x ? bv.getBlockX() : x; x = bv.getBlockX() > x ? bv.getBlockX() : x;
z = bv.getBlockZ() > z ? bv.getBlockZ() : z; z = bv.getBlockZ() > z ? bv.getBlockZ() : z;
} }

View File

@ -150,11 +150,11 @@ public class IrisObject extends IrisRegistrant
if(config.isBore()) if(config.isBore())
{ {
for(int i = x - Math.floorDiv(w, 2); i <= x + Math.floorDiv(w, 2); i++) for(int i = x - Math.floorDiv(w, 2); i <= x + Math.floorDiv(w, 2) - (w % 2 == 0 ? 1 : 0); i++)
{ {
for(int j = y - 1; j <= y + h - 2; j++) for(int j = y - Math.floorDiv(h, 2); j <= y + Math.floorDiv(h, 2) - (h % 2 == 0 ? 1 : 0); j++)
{ {
for(int k = z - Math.floorDiv(d, 2); k <= z + Math.floorDiv(d, 2); k++) for(int k = z - Math.floorDiv(d, 2); k <= z + Math.floorDiv(d, 2) - (d % 2 == 0 ? 1 : 0); k++)
{ {
placer.set(i, j, k, AIR); placer.set(i, j, k, AIR);
} }

View File

@ -1,6 +1,7 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.KList; import com.volmit.iris.util.KList;
@ -64,14 +65,14 @@ public class IrisObjectPlacement
} }
public IrisObject getSchematic(RNG random) public IrisObject getSchematic(ContextualChunkGenerator g, RNG random)
{ {
if(place.isEmpty()) if(place.isEmpty())
{ {
return null; return null;
} }
return Iris.data.getObjectLoader().load(place.get(random.nextInt(place.size()))); return (g == null ? Iris.globaldata : g.getData()).getObjectLoader().load(place.get(random.nextInt(place.size())));
} }
public int getTriesForChunk(RNG random) public int getTriesForChunk(RNG random)

View File

@ -1,6 +1,7 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
@ -176,7 +177,7 @@ public class IrisRegion extends IrisRegistrant
return getShoreHeightGenerator().fitDoubleD(shoreHeightMin, shoreHeightMax, x / shoreHeightZoom, z / shoreHeightZoom); return getShoreHeightGenerator().fitDoubleD(shoreHeightMin, shoreHeightMax, x / shoreHeightZoom, z / shoreHeightZoom);
} }
public KList<IrisBiome> getAllBiomes() public KList<IrisBiome> getAllBiomes(ContextualChunkGenerator g)
{ {
KMap<String, IrisBiome> b = new KMap<>(); KMap<String, IrisBiome> b = new KMap<>();
KSet<String> names = new KSet<>(); KSet<String> names = new KSet<>();
@ -196,7 +197,7 @@ public class IrisRegion extends IrisRegistrant
continue; continue;
} }
IrisBiome biome = Iris.data.getBiomeLoader().load(i); IrisBiome biome = (g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i);
b.put(biome.getLoadKey(), biome); b.put(biome.getLoadKey(), biome);
names.remove(i); names.remove(i);
names.addAll(biome.getChildren()); names.addAll(biome.getChildren());
@ -206,42 +207,42 @@ public class IrisRegion extends IrisRegistrant
return b.v(); return b.v();
} }
public KList<IrisBiome> getBiomes(InferredType type) public KList<IrisBiome> getBiomes(ContextualChunkGenerator g, InferredType type)
{ {
if(type.equals(InferredType.LAND)) if(type.equals(InferredType.LAND))
{ {
return getRealLandBiomes(); return getRealLandBiomes(g);
} }
else if(type.equals(InferredType.SEA)) else if(type.equals(InferredType.SEA))
{ {
return getRealSeaBiomes(); return getRealSeaBiomes(g);
} }
else if(type.equals(InferredType.SHORE)) else if(type.equals(InferredType.SHORE))
{ {
return getRealShoreBiomes(); return getRealShoreBiomes(g);
} }
else if(type.equals(InferredType.CAVE)) else if(type.equals(InferredType.CAVE))
{ {
return getRealCaveBiomes(); return getRealCaveBiomes(g);
} }
else if(type.equals(InferredType.ISLAND)) else if(type.equals(InferredType.ISLAND))
{ {
return getRealIslandBiomes(); return getRealIslandBiomes(g);
} }
else if(type.equals(InferredType.SKYLAND)) else if(type.equals(InferredType.SKYLAND))
{ {
return getRealSkylandBiomes(); return getRealSkylandBiomes(g);
} }
return new KList<>(); return new KList<>();
} }
public KList<IrisBiome> getRealCaveBiomes() public KList<IrisBiome> getRealCaveBiomes(ContextualChunkGenerator g)
{ {
return realCaveBiomes.aquire(() -> return realCaveBiomes.aquire(() ->
{ {
@ -249,14 +250,14 @@ public class IrisRegion extends IrisRegistrant
for(String i : getCaveBiomes()) for(String i : getCaveBiomes())
{ {
realCaveBiomes.add(Iris.data.getBiomeLoader().load(i)); realCaveBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i));
} }
return realCaveBiomes; return realCaveBiomes;
}); });
} }
public KList<IrisBiome> getRealSkylandBiomes() public KList<IrisBiome> getRealSkylandBiomes(ContextualChunkGenerator g)
{ {
return realSkylandBiomes.aquire(() -> return realSkylandBiomes.aquire(() ->
{ {
@ -264,14 +265,14 @@ public class IrisRegion extends IrisRegistrant
for(String i : getSkylandBiomes()) for(String i : getSkylandBiomes())
{ {
realSkylandBiomes.add(Iris.data.getBiomeLoader().load(i)); realSkylandBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i));
} }
return realSkylandBiomes; return realSkylandBiomes;
}); });
} }
public KList<IrisBiome> getRealIslandBiomes() public KList<IrisBiome> getRealIslandBiomes(ContextualChunkGenerator g)
{ {
return realIslandBiomes.aquire(() -> return realIslandBiomes.aquire(() ->
{ {
@ -279,14 +280,14 @@ public class IrisRegion extends IrisRegistrant
for(String i : getIslandBiomes()) for(String i : getIslandBiomes())
{ {
realIslandBiomes.add(Iris.data.getBiomeLoader().load(i)); realIslandBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i));
} }
return realIslandBiomes; return realIslandBiomes;
}); });
} }
public KList<IrisBiome> getRealShoreBiomes() public KList<IrisBiome> getRealShoreBiomes(ContextualChunkGenerator g)
{ {
return realShoreBiomes.aquire(() -> return realShoreBiomes.aquire(() ->
{ {
@ -294,14 +295,14 @@ public class IrisRegion extends IrisRegistrant
for(String i : getShoreBiomes()) for(String i : getShoreBiomes())
{ {
realShoreBiomes.add(Iris.data.getBiomeLoader().load(i)); realShoreBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i));
} }
return realShoreBiomes; return realShoreBiomes;
}); });
} }
public KList<IrisBiome> getRealSeaBiomes() public KList<IrisBiome> getRealSeaBiomes(ContextualChunkGenerator g)
{ {
return realSeaBiomes.aquire(() -> return realSeaBiomes.aquire(() ->
{ {
@ -309,14 +310,14 @@ public class IrisRegion extends IrisRegistrant
for(String i : getSeaBiomes()) for(String i : getSeaBiomes())
{ {
realSeaBiomes.add(Iris.data.getBiomeLoader().load(i)); realSeaBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i));
} }
return realSeaBiomes; return realSeaBiomes;
}); });
} }
public KList<IrisBiome> getRealLandBiomes() public KList<IrisBiome> getRealLandBiomes(ContextualChunkGenerator g)
{ {
return realLandBiomes.aquire(() -> return realLandBiomes.aquire(() ->
{ {
@ -324,7 +325,7 @@ public class IrisRegion extends IrisRegistrant
for(String i : getLandBiomes()) for(String i : getLandBiomes())
{ {
realLandBiomes.add(Iris.data.getBiomeLoader().load(i)); realLandBiomes.add((g == null ? Iris.globaldata : g.getData()).getBiomeLoader().load(i));
} }
return realLandBiomes; return realLandBiomes;

View File

@ -1,6 +1,7 @@
package com.volmit.iris.object; package com.volmit.iris.object;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.gen.ParallaxChunkGenerator; import com.volmit.iris.gen.ParallaxChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.CellGenerator; import com.volmit.iris.util.CellGenerator;
@ -52,20 +53,20 @@ public class IrisStructurePlacement
{ {
RNG rng = g.getMasterRandom().nextParallelRNG(-88738456); RNG rng = g.getMasterRandom().nextParallelRNG(-88738456);
RNG rnp = rng.nextParallelRNG(cx - (cz * cz)); RNG rnp = rng.nextParallelRNG(cx - (cz * cz));
int s = gridSize() - (getStructure().isMergeEdges() ? 1 : 0); int s = gridSize(g) - (getStructure(g).isMergeEdges() ? 1 : 0);
int sh = gridHeight() - (getStructure().isMergeEdges() ? 1 : 0); int sh = gridHeight(g) - (getStructure(g).isMergeEdges() ? 1 : 0);
for(int i = cx << 4; i < (cx << 4) + 15; i += Math.max(s / 2, 1)) for(int i = cx << 4; i < (cx << 4) + 15; i += Math.max(s, 1))
{ {
for(int j = cz << 4; j < (cz << 4) + 15; j += Math.max(s / 2, 1)) for(int j = cz << 4; j < (cz << 4) + 15; j += Math.max(s, 1))
{ {
if(getStructure().getMaxLayers() <= 1) if(getStructure(g).getMaxLayers() <= 1)
{ {
placeLayer(g, rng, rnp, i, 0, j, s, sh); placeLayer(g, rng, rnp, i, 0, j, s, sh);
continue; continue;
} }
for(int k = 0; k < s * getStructure().getMaxLayers(); k += Math.max(sh, 1)) for(int k = 0; k < s * getStructure(g).getMaxLayers(); k += Math.max(sh, 1))
{ {
placeLayer(g, rng, rnp, i, k, j, s, sh); placeLayer(g, rng, rnp, i, k, j, s, sh);
} }
@ -87,7 +88,7 @@ public class IrisStructurePlacement
} }
int h = (height == -1 ? 0 : height) + (Math.floorDiv(k, sh) * sh); int h = (height == -1 ? 0 : height) + (Math.floorDiv(k, sh) * sh);
TileResult t = getStructure().getTile(rng, i, h, j); TileResult t = getStructure(g).getTile(rng, i, h, j);
if(t != null) if(t != null)
{ {
@ -96,7 +97,7 @@ public class IrisStructurePlacement
t.getPlacement().setBore(true); t.getPlacement().setBore(true);
} }
IrisObject o = load(t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size()))); IrisObject o = load(g, t.getTile().getObjects().get(rnp.nextInt(t.getTile().getObjects().size())));
o.place(Math.floorDiv(i, s) * s, height == -1 ? -1 : h, Math.floorDiv(j, s) * s, g, t.getPlacement(), rng); o.place(Math.floorDiv(i, s) * s, height == -1 ? -1 : h, Math.floorDiv(j, s) * s, g, t.getPlacement(), rng);
} }
} }
@ -106,24 +107,24 @@ public class IrisStructurePlacement
return config.aquire(() -> new IrisObjectPlacement()); return config.aquire(() -> new IrisObjectPlacement());
} }
public IrisObject load(String s) public IrisObject load(ContextualChunkGenerator g, String s)
{ {
return Iris.data.getObjectLoader().load(s); return g.getData().getObjectLoader().load(s);
} }
public int gridSize() public int gridSize(ContextualChunkGenerator g)
{ {
return getStructure().getGridSize(); return getStructure(g).getGridSize();
} }
public int gridHeight() public int gridHeight(ContextualChunkGenerator g)
{ {
return getStructure().getGridHeight(); return getStructure(g).getGridHeight();
} }
public IrisStructure getStructure() public IrisStructure getStructure(ContextualChunkGenerator g)
{ {
return structure.aquire(() -> Iris.data.getStructureLoader().load(getTileset())); return structure.aquire(() -> (g == null ? Iris.globaldata : g.getData()).getStructureLoader().load(getTileset()));
} }
public boolean hasStructure(RNG random, double x, double y, double z) public boolean hasStructure(RNG random, double x, double y, double z)