9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-30 04:29:05 +00:00

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

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

View File

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

View File

@@ -1,5 +1,6 @@
package com.volmit.iris.gen;
import java.io.File;
import java.util.List;
import java.util.Random;
@@ -22,7 +23,14 @@ import org.bukkit.generator.ChunkGenerator;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisContext;
import com.volmit.iris.IrisDataManager;
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.CNG;
import com.volmit.iris.util.ChronoLatch;
@@ -38,6 +46,7 @@ import net.md_5.bungee.api.ChatColor;
@EqualsAndHashCode(callSuper = false)
public abstract class ContextualChunkGenerator extends ChunkGenerator implements Listener
{
private IrisDataManager data;
protected boolean failing;
protected int task;
protected boolean dev;
@@ -86,6 +95,41 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
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)
{
if(initialized)
@@ -93,6 +137,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
return;
}
data = new IrisDataManager(new File(getWorld().getWorldFolder(), "iris"));
this.world = world;
this.masterRandom = new RNG(world.getSeed());
metrics = new IrisMetrics(128);

View File

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

View File

@@ -35,6 +35,12 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
lock = new IrisLock("IrisChunkGenerator");
}
public IrisChunkGenerator(String dimensionName)
{
super(dimensionName, 16);
lock = new IrisLock("IrisChunkGenerator");
}
@Override
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()
{
long bytes = 1024 * 1024 * (8 + (getThreads() / 4));
long bytes = 1024 * 1024 * (8 + (getThreads() / 3));
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 += ceilingParallaxMap.getLoadedChunks().size() * 256 * 4 * 460;
bytes += getSliverBuffer() * 220;
bytes += 752 * Iris.data.getObjectLoader().getTotalStorage();
bytes += 823 * getData().getObjectLoader().getTotalStorage();
return bytes;
}
@@ -190,6 +196,6 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
@Override
public boolean shouldGenerateStructures()
{
return true;
return false;
}
}

View File

@@ -5,7 +5,6 @@ import java.io.IOException;
import org.bukkit.World;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicSliver;
import com.volmit.iris.gen.atomics.AtomicSliverMap;
import com.volmit.iris.gen.atomics.AtomicWorldData;
@@ -194,7 +193,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
getMetrics().getParallax().put(p.getMilliseconds());
super.onPostParallaxPostGenerate(random, x, z, data, grid, height, biomeMap);
getParallaxMap().clean(ticks);
Iris.data.getObjectLoader().clean();
getData().getObjectLoader().clean();
}
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(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);
}
}
else if(y >= h && y <= i.getStructure().getGridHeight() + h)
else if(y >= h && y <= i.getStructure(this).getGridHeight() + h)
{
p.add(i);
}
@@ -225,13 +224,13 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
{
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);
}
}
else if(y >= h && y <= i.getStructure().getGridHeight() + h)
else if(y >= h && y <= i.getStructure(this).getGridHeight() + h)
{
p.add(i);
}
@@ -244,12 +243,12 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
continue;
}
int hv = (i.getHeight() == -1 ? 0 : i.getHeight()) + (Math.floorDiv(y, i.getStructure().getGridHeight()) * i.getStructure().getGridHeight());
TileResult tile = i.getStructure().getTile(ro, Math.floorDiv(i.gridSize(), x) * i.gridSize(), hv, Math.floorDiv(i.gridSize(), z) * i.gridSize());
int hv = (i.getHeight() == -1 ? 0 : i.getHeight()) + (Math.floorDiv(y, i.getStructure(this).getGridHeight()) * i.getStructure(this).getGridHeight());
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)
{
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)
{
String key = "par." + x + "." + "z";
ChunkPosition rad = getDimension().getParallaxSize();
ChunkPosition rad = getDimension().getParallaxSize(this);
KList<NastyRunnable> q = new KList<>();
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;
}
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())
{
@@ -321,18 +320,20 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
for(IrisStructurePlacement k : r.getStructures())
{
lockq.lock();
q.add(() ->
{
k.place(this, random, i, j);
k.place(this, random.nextParallelRNG(2228), i, j);
});
lockq.unlock();
}
for(IrisStructurePlacement k : b.getStructures())
{
lockq.lock();
q.add(() ->
{
k.place(this, random, i, j);
k.place(this, random.nextParallelRNG(-22228), i, j);
});
lockq.unlock();
}
@@ -399,7 +400,7 @@ public abstract class ParallaxChunkGenerator extends TerrainChunkGenerator imple
for(int i = 0; i < o.getTriesForChunk(rng); i++)
{
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;
}
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;
import com.volmit.iris.gen.ContextualChunkGenerator;
import com.volmit.iris.object.InferredType;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.util.RarityCellGenerator;
@@ -22,14 +23,14 @@ public class BiomeDataProvider
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());
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();
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)
@@ -69,7 +69,7 @@ public class GenLayerBiome extends GenLayer
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)
@@ -147,7 +147,7 @@ public class GenLayerBiome extends GenLayer
{
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))
{
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.getBiome().getRealChildren().isEmpty())
if(!parent.getBiome().getRealChildren(iris).isEmpty())
{
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());
IrisBiome biome = childCell.get(x, z, chx);
biome.setInferredType(parent.getBiome().getInferredType());