mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-30 04:29:05 +00:00
Region rarity
This commit is contained in:
@@ -51,6 +51,7 @@ public abstract class BiomeChunkGenerator extends DimensionChunkGenerator
|
||||
|
||||
public void onInit(World world, RNG rng)
|
||||
{
|
||||
super.onInit(world, rng);
|
||||
loadGenerators();
|
||||
glBiome = new GenLayerBiome(this, masterRandom.nextParallelRNG(1));
|
||||
masterFracture = CNG.signature(rng.nextParallelRNG(13)).scale(0.12);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.volmit.iris.gen;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
@@ -137,7 +136,7 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
|
||||
return;
|
||||
}
|
||||
|
||||
data = new IrisDataManager(new File(getWorld().getWorldFolder(), "iris"));
|
||||
data = new IrisDataManager(getWorld().getWorldFolder());
|
||||
this.world = world;
|
||||
this.masterRandom = new RNG(world.getSeed());
|
||||
metrics = new IrisMetrics(128);
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.volmit.iris.gen;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
@@ -10,6 +13,7 @@ import com.volmit.iris.object.IrisDimension;
|
||||
import com.volmit.iris.object.IrisRegion;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.BiomeResult;
|
||||
import com.volmit.iris.util.RNG;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -18,7 +22,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
|
||||
{
|
||||
protected final String dimensionName;
|
||||
protected String dimensionName;
|
||||
protected static final BlockData AIR = Material.AIR.createBlockData();
|
||||
protected static final BlockData CAVE_AIR = B.get("CAVE_AIR");
|
||||
protected static final BlockData BEDROCK = Material.BEDROCK.createBlockData();
|
||||
@@ -29,6 +33,34 @@ public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
|
||||
this.dimensionName = dimensionName;
|
||||
}
|
||||
|
||||
public void onInit(World world, RNG masterRandom)
|
||||
{
|
||||
if(dimensionName.isEmpty())
|
||||
{
|
||||
File folder = new File(world.getWorldFolder(), "iris/dimensions");
|
||||
|
||||
if(!folder.exists())
|
||||
{
|
||||
Iris.error("Missing World iris/dimensions folder!");
|
||||
dimensionName = "error-missing-dimension";
|
||||
return;
|
||||
}
|
||||
|
||||
for(File i : folder.listFiles())
|
||||
{
|
||||
if(i.isFile() && i.getName().endsWith(".json"))
|
||||
{
|
||||
dimensionName = i.getName().replaceAll("\\Q.json\\E", "");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Iris.error("Missing World iris/dimensions/<dimension-name>.json file. Assuming overworld!");
|
||||
dimensionName = "error-missing-dimension";
|
||||
fail(new RuntimeException("Missing dimension folder/file in " + folder.getAbsolutePath()));
|
||||
}
|
||||
}
|
||||
|
||||
public IrisDimension getDimension()
|
||||
{
|
||||
IrisDimension d = loadDimension(dimensionName);
|
||||
|
||||
@@ -41,6 +41,12 @@ public class IrisChunkGenerator extends CeilingChunkGenerator implements IrisCon
|
||||
lock = new IrisLock("IrisChunkGenerator");
|
||||
}
|
||||
|
||||
public IrisChunkGenerator(int tc)
|
||||
{
|
||||
super("", tc);
|
||||
lock = new IrisLock("IrisChunkGenerator");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onGenerate(RNG random, int x, int z, ChunkData data, BiomeGrid grid)
|
||||
{
|
||||
|
||||
@@ -2,10 +2,11 @@ package com.volmit.iris.gen.layer;
|
||||
|
||||
import com.volmit.iris.gen.ContextualChunkGenerator;
|
||||
import com.volmit.iris.object.InferredType;
|
||||
import com.volmit.iris.object.IrisBiome;
|
||||
import com.volmit.iris.object.IrisRegion;
|
||||
import com.volmit.iris.util.RarityCellGenerator;
|
||||
import com.volmit.iris.util.BiomeResult;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RarityCellGenerator;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -13,14 +14,14 @@ import lombok.Data;
|
||||
public class BiomeDataProvider
|
||||
{
|
||||
private InferredType type;
|
||||
private RarityCellGenerator generator;
|
||||
private RarityCellGenerator<IrisBiome> generator;
|
||||
private GenLayerBiome layer;
|
||||
|
||||
public BiomeDataProvider(GenLayerBiome layer, InferredType type, RNG rng)
|
||||
{
|
||||
this.type = type;
|
||||
this.layer = layer;
|
||||
generator = new RarityCellGenerator(rng.nextParallelRNG(4645079 + (type.ordinal() * 23845)));
|
||||
generator = new RarityCellGenerator<IrisBiome>(rng.nextParallelRNG(4645079 + (type.ordinal() * 23845)));
|
||||
}
|
||||
|
||||
public BiomeResult generatePureData(ContextualChunkGenerator g, double bx, double bz, int rawX, int rawZ, IrisRegion regionData)
|
||||
|
||||
@@ -21,7 +21,7 @@ import lombok.EqualsAndHashCode;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class GenLayerBiome extends GenLayer
|
||||
{
|
||||
private CellGenerator regionGenerator;
|
||||
private RarityCellGenerator<IrisRegion> regionGenerator;
|
||||
private CellGenerator bridgeGenerator;
|
||||
private BiomeDataProvider seaProvider;
|
||||
private BiomeDataProvider landProvider;
|
||||
@@ -41,7 +41,7 @@ public class GenLayerBiome extends GenLayer
|
||||
caveProvider = new BiomeDataProvider(this, InferredType.CAVE, rng);
|
||||
islandProvider = new BiomeDataProvider(this, InferredType.ISLAND, rng);
|
||||
skylandProvider = new BiomeDataProvider(this, InferredType.SKYLAND, rng);
|
||||
regionGenerator = new CellGenerator(rng.nextParallelRNG(1188519));
|
||||
regionGenerator = new RarityCellGenerator<IrisRegion>(rng.nextParallelRNG(1188519));
|
||||
bridgeGenerator = new CellGenerator(rng.nextParallelRNG(1541462));
|
||||
}
|
||||
|
||||
@@ -53,13 +53,12 @@ public class GenLayerBiome extends GenLayer
|
||||
return null;
|
||||
}
|
||||
|
||||
regionGenerator.setShuffle(11);
|
||||
regionGenerator.setCellScale(0.33 / iris.getDimension().getRegionZoom());
|
||||
double x = bx / iris.getDimension().getBiomeZoom();
|
||||
double z = bz / iris.getDimension().getBiomeZoom();
|
||||
String regionId = iris.getDimension().getRegions().get(regionGenerator.getIndex(x, z, iris.getDimension().getRegions().size()));
|
||||
regionGenerator.setShuffle(iris.getDimension().getRegionShuffle());
|
||||
regionGenerator.setCellScale(0.35);
|
||||
double x = bx / iris.getDimension().getRegionZoom();
|
||||
double z = bz / iris.getDimension().getRegionZoom();
|
||||
|
||||
return iris.loadRegion(regionId);
|
||||
return regionGenerator.get(x, z, iris.getDimension().getAllRegions(iris));
|
||||
}
|
||||
|
||||
public BiomeResult generateData(double bx, double bz, int rawX, int rawZ)
|
||||
@@ -119,14 +118,14 @@ public class GenLayerBiome extends GenLayer
|
||||
|
||||
public InferredType getType(double bx, double bz, IrisRegion regionData)
|
||||
{
|
||||
bridgeGenerator.setShuffle(47);
|
||||
bridgeGenerator.setCellScale(0.33 / iris.getDimension().getContinentZoom());
|
||||
double x = bx / iris.getDimension().getBiomeZoom();
|
||||
double z = bz / iris.getDimension().getBiomeZoom();
|
||||
bridgeGenerator.setShuffle(iris.getDimension().getContinentalShuffle());
|
||||
bridgeGenerator.setCellScale(0.33);
|
||||
double x = bx / iris.getDimension().getContinentZoom();
|
||||
double z = bz / iris.getDimension().getContinentZoom();
|
||||
return bridgeGenerator.getIndex(x, z, 2) == 1 ? InferredType.LAND : InferredType.SEA;
|
||||
}
|
||||
|
||||
public BiomeResult generateBiomeData(double bx, double bz, IrisRegion regionData, RarityCellGenerator cell, KList<IrisBiome> biomes, InferredType inferredType)
|
||||
public BiomeResult generateBiomeData(double bx, double bz, IrisRegion regionData, RarityCellGenerator<IrisBiome> cell, KList<IrisBiome> biomes, InferredType inferredType)
|
||||
{
|
||||
if(biomes.isEmpty())
|
||||
{
|
||||
@@ -162,12 +161,12 @@ public class GenLayerBiome extends GenLayer
|
||||
return pureResult;
|
||||
}
|
||||
|
||||
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator parentCell, BiomeResult parent)
|
||||
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator<IrisBiome> parentCell, BiomeResult parent)
|
||||
{
|
||||
return implode(bx, bz, regionData, parentCell, parent, 1);
|
||||
}
|
||||
|
||||
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator parentCell, BiomeResult parent, int hits)
|
||||
public BiomeResult implode(double bx, double bz, IrisRegion regionData, RarityCellGenerator<IrisBiome> parentCell, BiomeResult parent, int hits)
|
||||
{
|
||||
if(hits > 9)
|
||||
{
|
||||
@@ -181,7 +180,7 @@ public class GenLayerBiome extends GenLayer
|
||||
{
|
||||
if(!parent.getBiome().getRealChildren(iris).isEmpty())
|
||||
{
|
||||
RarityCellGenerator childCell = parent.getBiome().getChildrenGenerator(rng, 123, parentCell.getCellScale() * parent.getBiome().getChildShrinkFactor());
|
||||
RarityCellGenerator<IrisBiome> childCell = parent.getBiome().getChildrenGenerator(rng, 123, parentCell.getCellScale() * parent.getBiome().getChildShrinkFactor());
|
||||
KList<IrisBiome> chx = parent.getBiome().getRealChildren(iris).copy();
|
||||
chx.add(parent.getBiome());
|
||||
IrisBiome biome = childCell.get(x, z, chx);
|
||||
|
||||
Reference in New Issue
Block a user