Start the pain

This commit is contained in:
Daniel Mills
2020-09-09 22:45:55 -04:00
parent 5bd22f25b8
commit c418683b3d
13 changed files with 45 additions and 169 deletions
@@ -237,7 +237,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
// Set Sea Material (water/lava) // Set Sea Material (water/lava)
if(underwater) if(underwater)
{ {
block = seaLayers.hasIndex(fluidHeight - k) ? seaLayers.get(depth) : biomeFluid != null ? biomeFluid : getDimension().getFluid(rockRandom, wx, k, wz); block = seaLayers.hasIndex(fluidHeight - k) ? seaLayers.get(depth) : biomeFluid != null ? biomeFluid : getDimension().getFluidPalette().get(rockRandom, wx, k, wz);
} }
// Set Surface Material for cavern layer surfaces // Set Surface Material for cavern layer surfaces
@@ -259,7 +259,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
// Set Surface Material for true surface // Set Surface Material for true surface
else else
{ {
block = layers.hasIndex(depth) ? layers.get(depth) : getDimension().getRock(rockRandom, wx, k, wz); block = layers.hasIndex(depth) ? layers.get(depth) : getDimension().getRockPalette().get(rockRandom, wx, k, wz);
depth++; depth++;
} }
@@ -375,12 +375,7 @@ public class ProjectManager
}); });
// @NoArgsConstructor // @NoArgsConstructor
World world = NMSCreator.createWorld(new WorldCreator(wfp) World world = NMSCreator.createWorld(new WorldCreator(wfp).seed(1337).generator(gen).generateStructures(d.isVanillaStructures()).type(WorldType.NORMAL).environment(d.getEnvironment()), false);
.seed(1337)
.generator(gen)
.generateStructures(d.isVanillaStructures())
.type(WorldType.NORMAL)
.environment(d.getEnvironment()), false);
//@done //@done
gx.getTarget().setRealWorld(world); gx.getTarget().setRealWorld(world);
Iris.linkMultiverseCore.removeFromConfig(world); Iris.linkMultiverseCore.removeFromConfig(world);
@@ -866,12 +861,6 @@ public class ProjectManager
b4.setGenerator(gen.getLoadKey()); b4.setGenerator(gen.getLoadKey());
b4.setMin(-5); b4.setMin(-5);
b4.setMax(-38); b4.setMax(-38);
exampleLand2.getLayers().get(0).getPalette().clear();
exampleLand2.getLayers().get(0).getPalette().add("RED_SAND");
exampleShore1.getLayers().get(0).getPalette().clear();
exampleShore1.getLayers().get(0).getPalette().add("SAND");
exampleOcean1.getLayers().get(0).getPalette().clear();
exampleOcean1.getLayers().get(0).getPalette().add("SAND");
exampleLand1.getGenerators().clear(); exampleLand1.getGenerators().clear();
exampleLand1.getGenerators().add(b1); exampleLand1.getGenerators().add(b1);
exampleLand2.getGenerators().clear(); exampleLand2.getGenerators().clear();
@@ -6,7 +6,6 @@ import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
import com.volmit.iris.util.DependsOn; import com.volmit.iris.util.DependsOn;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@@ -29,30 +28,25 @@ import lombok.experimental.Accessors;
public class IrisBiomeDecorator public class IrisBiomeDecorator
{ {
@DontObfuscate @DontObfuscate
@Desc("The varience dispersion is used when multiple blocks are put in the palette. Scatter scrambles them, Wispy shows streak-looking varience") @Desc("The varience dispersion is used when multiple blocks are put in the palette. Scatter scrambles them, Wispy shows streak-looking varience")
private IrisGeneratorStyle variance = NoiseStyle.STATIC.style(); private IrisGeneratorStyle variance = NoiseStyle.STATIC.style();
@DontObfuscate @DontObfuscate
@Desc("Dispersion is used to pick places to spawn. Scatter randomly places them (vanilla) or Wispy for a streak like patch system.") @Desc("Dispersion is used to pick places to spawn. Scatter randomly places them (vanilla) or Wispy for a streak like patch system.")
private IrisGeneratorStyle style = NoiseStyle.STATIC.style(); private IrisGeneratorStyle style = NoiseStyle.STATIC.style();
@DependsOn({"stackMin", "stackMax"}) @DependsOn({"stackMin", "stackMax"})
@DontObfuscate @DontObfuscate
@Desc("If this decorator has a height more than 1 this changes how it picks the height between your maxes. Scatter = random, Wispy = wavy heights") @Desc("If this decorator has a height more than 1 this changes how it picks the height between your maxes. Scatter = random, Wispy = wavy heights")
private IrisGeneratorStyle heightVariance = NoiseStyle.STATIC.style(); private IrisGeneratorStyle heightVariance = NoiseStyle.STATIC.style();
@DontObfuscate @DontObfuscate
@Desc("Tells iris where this decoration is a part of. I.e. SHORE_LINE or SEA_SURFACE") @Desc("Tells iris where this decoration is a part of. I.e. SHORE_LINE or SEA_SURFACE")
private DecorationPart partOf = DecorationPart.NONE; private DecorationPart partOf = DecorationPart.NONE;
@DependsOn({"stackMin", "stackMax"}) @DependsOn({"stackMin", "stackMax"})
@MinNumber(1) @MinNumber(1)
@MaxNumber(256) @MaxNumber(256)
@DontObfuscate @DontObfuscate
@Desc("The minimum repeat stack height (setting to 3 would stack 3 of <block> on top of each other") @Desc("The minimum repeat stack height (setting to 3 would stack 3 of <block> on top of each other")
private int stackMin = 1; private int stackMin = 1;
@@ -60,27 +54,23 @@ public class IrisBiomeDecorator
@DependsOn({"stackMin", "stackMax"}) @DependsOn({"stackMin", "stackMax"})
@MinNumber(1) @MinNumber(1)
@MaxNumber(256) @MaxNumber(256)
@DontObfuscate @DontObfuscate
@Desc("The maximum repeat stack height") @Desc("The maximum repeat stack height")
private int stackMax = 1; private int stackMax = 1;
@MinNumber(0.0001) @MinNumber(0.0001)
@DontObfuscate @DontObfuscate
@Desc("The zoom is for zooming in or out wispy dispersions. Makes patches bigger the higher this zoom value is") @Desc("The zoom is for zooming in or out wispy dispersions. Makes patches bigger the higher this zoom value is")
private double zoom = 1; private double zoom = 1;
@MinNumber(0.0001) @MinNumber(0.0001)
@DontObfuscate @DontObfuscate
@Desc("The zoom is for zooming in or out variance. Makes patches have more or less of one type.") @Desc("The zoom is for zooming in or out variance. Makes patches have more or less of one type.")
private double varianceZoom = 1; private double varianceZoom = 1;
@DependsOn({"stackMin", "stackMax"}) @DependsOn({"stackMin", "stackMax"})
@MinNumber(0.0001) @MinNumber(0.0001)
@DontObfuscate @DontObfuscate
@Desc("The vertical zoom is for wispy stack heights. Zooming this in makes stack heights more slowly change over a distance") @Desc("The vertical zoom is for wispy stack heights. Zooming this in makes stack heights more slowly change over a distance")
private double verticalZoom = 1; private double verticalZoom = 1;
@@ -88,16 +78,14 @@ public class IrisBiomeDecorator
@MinNumber(0) @MinNumber(0)
@MaxNumber(1) @MaxNumber(1)
@DontObfuscate @DontObfuscate
@Desc("The chance for this decorator to decorate at a given X,Y coordinate. This is hit 256 times per chunk (per surface block)") @Desc("The chance for this decorator to decorate at a given X,Y coordinate. This is hit 256 times per chunk (per surface block)")
private double chance = 0.1; private double chance = 0.1;
@Required @Required
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = IrisBlockData.class)
@DontObfuscate @DontObfuscate
@Desc("The palette of blocks to pick from when this decorator needs to place.") @Desc("The palette of blocks to pick from when this decorator needs to place.")
private KList<String> palette = new KList<String>().qadd("GRASS"); private KList<IrisBlockData> palette = new KList<IrisBlockData>().qadd(new IrisBlockData("grass"));
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
private final transient AtomicCache<CNG> varianceGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> varianceGenerator = new AtomicCache<>();
@@ -132,9 +120,9 @@ public class IrisBiomeDecorator
return varianceGenerator.aquire(() -> variance.create(rng.nextParallelRNG((int) (getBlockData().size()))).scale(1D / varianceZoom)); return varianceGenerator.aquire(() -> variance.create(rng.nextParallelRNG((int) (getBlockData().size()))).scale(1D / varianceZoom));
} }
public KList<String> add(String b) public KList<IrisBlockData> add(String b)
{ {
palette.add(b); palette.add(new IrisBlockData(b));
return palette; return palette;
} }
@@ -167,9 +155,9 @@ public class IrisBiomeDecorator
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(String i : palette) for(IrisBlockData i : palette)
{ {
BlockData bx = B.getBlockData(i); BlockData bx = i.getBlockData();
if(bx != null) if(bx != null)
{ {
blockData.add(bx); blockData.add(bx);
@@ -5,7 +5,6 @@ import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
import com.volmit.iris.util.DependsOn; import com.volmit.iris.util.DependsOn;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@@ -27,7 +26,6 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisBiomePaletteLayer public class IrisBiomePaletteLayer
{ {
@DontObfuscate @DontObfuscate
@Desc("The style of noise") @Desc("The style of noise")
private IrisGeneratorStyle style = NoiseStyle.STATIC.style(); private IrisGeneratorStyle style = NoiseStyle.STATIC.style();
@@ -55,7 +53,7 @@ public class IrisBiomePaletteLayer
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = String.class)
@DontObfuscate @DontObfuscate
@Desc("The palette of blocks to be used in this layer") @Desc("The palette of blocks to be used in this layer")
private KList<String> palette = new KList<String>().qadd("GRASS_BLOCK"); private KList<IrisBlockData> palette = new KList<IrisBlockData>().qadd(new IrisBlockData("GRASS_BLOCK"));
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
@@ -90,9 +88,9 @@ public class IrisBiomePaletteLayer
}); });
} }
public KList<String> add(String b) public KList<IrisBlockData> add(String b)
{ {
palette.add(b); palette.add(new IrisBlockData(b));
return palette; return palette;
} }
@@ -102,9 +100,9 @@ public class IrisBiomePaletteLayer
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(String ix : palette) for(IrisBlockData ix : palette)
{ {
BlockData bx = B.getBlockData(ix); BlockData bx = ix.getBlockData();
if(bx != null) if(bx != null)
{ {
blockData.add(bx); blockData.add(bx);
@@ -41,6 +41,11 @@ public class IrisBlockData
private final transient AtomicCache<BlockData> blockdata = new AtomicCache<>(); private final transient AtomicCache<BlockData> blockdata = new AtomicCache<>();
private final transient AtomicCache<String> realProperties = new AtomicCache<>(); private final transient AtomicCache<String> realProperties = new AtomicCache<>();
public IrisBlockData(String b)
{
this.block = b;
}
public String computeProperties() public String computeProperties()
{ {
if(getData().isEmpty()) if(getData().isEmpty())
@@ -23,7 +23,6 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisBlockDrops public class IrisBlockDrops
{ {
@Required @Required
@ArrayType(min = 1, type = IrisBlockData.class) @ArrayType(min = 1, type = IrisBlockData.class)
@Desc("The blocks that drop loot") @Desc("The blocks that drop loot")
@@ -37,7 +37,7 @@ public class IrisCaveFluid
@Required @Required
@DontObfuscate @DontObfuscate
@Desc("The fluid type that should spawn here") @Desc("The fluid type that should spawn here")
private String fluidType = "CAVE_AIR"; private IrisBlockData fluidType = new IrisBlockData("CAVE_AIR");
private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>(); private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>();
@@ -50,7 +50,7 @@ public class IrisCaveFluid
{ {
return fluidData.aquire(() -> return fluidData.aquire(() ->
{ {
BlockData b = B.get(getFluidType()); BlockData b = getFluidType().getBlockData();
if(b != null) if(b != null)
{ {
@@ -17,7 +17,6 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisCaveLayer public class IrisCaveLayer
{ {
@Required @Required
@DontObfuscate @DontObfuscate
@Desc("The vertical slope this cave layer follows") @Desc("The vertical slope this cave layer follows")
@@ -21,7 +21,6 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisCompatabilityFilter public class IrisCompatabilityFilter
{ {
@Required @Required
@DontObfuscate @DontObfuscate
@Desc("When iris sees this block, and it's not reconized") @Desc("When iris sees this block, and it's not reconized")
@@ -7,7 +7,6 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.gen.TopographicTerrainProvider; import com.volmit.iris.gen.TopographicTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
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;
@@ -28,7 +27,6 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisDepositGenerator public class IrisDepositGenerator
{ {
@Required @Required
@MinNumber(0) @MinNumber(0)
@MaxNumber(256) @MaxNumber(256)
@@ -72,10 +70,10 @@ public class IrisDepositGenerator
private int minPerChunk = 1; private int minPerChunk = 1;
@Required @Required
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = IrisBlockData.class)
@DontObfuscate @DontObfuscate
@Desc("The palette of blocks to be used in this deposit generator") @Desc("The palette of blocks to be used in this deposit generator")
private KList<String> palette = new KList<String>(); private KList<IrisBlockData> palette = new KList<IrisBlockData>();
@MinNumber(1) @MinNumber(1)
@MaxNumber(64) @MaxNumber(64)
@@ -145,9 +143,9 @@ public class IrisDepositGenerator
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(String ix : palette) for(IrisBlockData ix : palette)
{ {
BlockData bx = B.getBlockData(ix); BlockData bx = ix.getBlockData();
if(bx != null) if(bx != null)
{ {
@@ -211,7 +209,7 @@ public class IrisDepositGenerator
boolean allow = false; boolean allow = false;
BlockData b = data.getBlockData(nx, ny, nz); BlockData b = data.getBlockData(nx, ny, nz);
for(BlockData f : g.getDimension().getRockData()) for(BlockData f : g.getDimension().getRockPalette().getBlockData())
{ {
if(f.getMaterial().equals(b.getMaterial())) if(f.getMaterial().equals(b.getMaterial()))
{ {
@@ -11,7 +11,6 @@ import com.volmit.iris.gen.ParallelTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
import com.volmit.iris.util.ChunkPosition; import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@@ -277,10 +276,6 @@ public class IrisDimension extends IrisRegistrant
@Desc("Overlay additional noise on top of the interoplated terrain.") @Desc("Overlay additional noise on top of the interoplated terrain.")
private KList<IrisShapedGeneratorStyle> overlayNoise = new KList<>(); private KList<IrisShapedGeneratorStyle> overlayNoise = new KList<>();
@DontObfuscate
@Desc("The noise style for rock types")
private IrisGeneratorStyle rockStyle = NoiseStyle.STATIC.style();
@ArrayType(min = 1, type = IrisCaveLayer.class) @ArrayType(min = 1, type = IrisCaveLayer.class)
@DontObfuscate @DontObfuscate
@Desc("Define cave layers") @Desc("Define cave layers")
@@ -291,10 +286,6 @@ public class IrisDimension extends IrisRegistrant
@Desc("Define carve layers") @Desc("Define carve layers")
private KList<IrisCarveLayer> carveLayers = new KList<>(); private KList<IrisCarveLayer> carveLayers = new KList<>();
@DontObfuscate
@Desc("The noise style for fluid types")
private IrisGeneratorStyle fluidStyle = NoiseStyle.STATIC.style();
@MinNumber(0.0001) @MinNumber(0.0001)
@MaxNumber(512) @MaxNumber(512)
@DontObfuscate @DontObfuscate
@@ -304,12 +295,12 @@ public class IrisDimension extends IrisRegistrant
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = String.class)
@DontObfuscate @DontObfuscate
@Desc("The palette of blocks for 'stone'") @Desc("The palette of blocks for 'stone'")
private KList<String> rockPalette = new KList<String>().qadd("STONE"); private IrisMaterialPalette rockPalette = new IrisMaterialPalette().qadd("STONE");
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = String.class)
@DontObfuscate @DontObfuscate
@Desc("The palette of blocks for 'water'") @Desc("The palette of blocks for 'water'")
private KList<String> fluidPalette = new KList<String>().qadd("WATER"); private IrisMaterialPalette fluidPalette = new IrisMaterialPalette().qadd("WATER");
@ArrayType(min = 1, type = IrisBiomeMutation.class) @ArrayType(min = 1, type = IrisBiomeMutation.class)
@DontObfuscate @DontObfuscate
@@ -317,8 +308,6 @@ public class IrisDimension extends IrisRegistrant
private KList<IrisBiomeMutation> mutations = new KList<>(); private KList<IrisBiomeMutation> mutations = new KList<>();
private final transient AtomicCache<ChunkPosition> parallaxSize = new AtomicCache<>(); private final transient AtomicCache<ChunkPosition> parallaxSize = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> rockData = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> fluidData = new AtomicCache<>();
private final transient AtomicCache<KList<IrisPostBlockFilter>> cacheFilters = new AtomicCache<>(); private final transient AtomicCache<KList<IrisPostBlockFilter>> cacheFilters = new AtomicCache<>();
private final transient AtomicCache<CNG> rockLayerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> rockLayerGenerator = new AtomicCache<>();
private final transient AtomicCache<CNG> fluidLayerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> fluidLayerGenerator = new AtomicCache<>();
@@ -477,90 +466,6 @@ public class IrisDimension extends IrisRegistrant
}); });
} }
public BlockData getRock(RNG rng, double x, double y, double z)
{
if(getRockData().isEmpty())
{
return STONE;
}
if(getRockData().size() == 1)
{
return getRockData().get(0);
}
return getRockGenerator(rng).fit(getRockData(), x, y, z);
}
public CNG getRockGenerator(RNG rng)
{
return rockLayerGenerator.aquire(() ->
{
RNG rngx = rng.nextParallelRNG((int) (getRockData().size() * getRegions().size() * getLandZoom() * 10357));
return rockStyle.create(rngx);
});
}
public KList<BlockData> getRockData()
{
return rockData.aquire(() ->
{
KList<BlockData> rockData = new KList<>();
for(String ix : rockPalette)
{
BlockData bx = B.getBlockData(ix);
if(bx != null)
{
rockData.add(bx);
}
}
return rockData;
});
}
public BlockData getFluid(RNG rng, double x, double y, double z)
{
if(getFluidData().isEmpty())
{
return WATER;
}
if(getFluidData().size() == 1)
{
return getFluidData().get(0);
}
return getFluidGenerator(rng).fit(getFluidData(), x, y, z);
}
public CNG getFluidGenerator(RNG rng)
{
return fluidLayerGenerator.aquire(() ->
{
RNG rngx = rng.nextParallelRNG(getFluidData().size() * (int) (getRockData().size() * getRegions().size() * getLandZoom() * 10357));
return fluidStyle.create(rngx);
});
}
public KList<BlockData> getFluidData()
{
return fluidData.aquire(() ->
{
KList<BlockData> fluidData = new KList<>();
for(String ix : fluidPalette)
{
BlockData bx = B.getBlockData(ix);
if(bx != null)
{
fluidData.add(bx);
}
}
return fluidData;
});
}
public double getDimensionAngle() public double getDimensionAngle()
{ {
return rad.aquire(() -> Math.toRadians(dimensionAngleDeg)); return rad.aquire(() -> Math.toRadians(dimensionAngleDeg));
@@ -5,7 +5,6 @@ import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.noise.CNG; import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType; import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
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;
@@ -25,7 +24,6 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisMaterialPalette public class IrisMaterialPalette
{ {
@DontObfuscate @DontObfuscate
@Desc("The style of noise") @Desc("The style of noise")
private IrisGeneratorStyle style = NoiseStyle.STATIC.style(); private IrisGeneratorStyle style = NoiseStyle.STATIC.style();
@@ -36,10 +34,10 @@ public class IrisMaterialPalette
private double zoom = 5; private double zoom = 5;
@Required @Required
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = IrisBlockData.class)
@DontObfuscate @DontObfuscate
@Desc("The palette of blocks to be used in this layer") @Desc("The palette of blocks to be used in this layer")
private KList<String> palette = new KList<String>().qadd("STONE"); private KList<IrisBlockData> palette = new KList<IrisBlockData>().qadd(new IrisBlockData("STONE"));
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>(); private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>(); private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
@@ -69,21 +67,28 @@ public class IrisMaterialPalette
}); });
} }
public KList<String> add(String b) public KList<IrisBlockData> add(String b)
{ {
palette.add(b); palette.add(new IrisBlockData(b));
return palette; return palette;
} }
public IrisMaterialPalette qadd(String b)
{
palette.add(new IrisBlockData(b));
return this;
}
public KList<BlockData> getBlockData() public KList<BlockData> getBlockData()
{ {
return blockData.aquire(() -> return blockData.aquire(() ->
{ {
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(String ix : palette) for(IrisBlockData ix : palette)
{ {
BlockData bx = B.getBlockData(ix); BlockData bx = ix.getBlockData();
if(bx != null) if(bx != null)
{ {
blockData.add(bx); blockData.add(bx);
@@ -24,20 +24,16 @@ import lombok.experimental.Accessors;
@Data @Data
public class IrisObjectReplace public class IrisObjectReplace
{ {
@ArrayType(min = 1, type = String.class) @ArrayType(min = 1, type = String.class)
@Required @Required
@Desc("Find this block") @Desc("Find this block")
@DontObfuscate @DontObfuscate
private KList<String> find = new KList<>(); private KList<String> find = new KList<>();
@ArrayType(min = 1, type = String.class)
@Required @Required
@Desc("Replace it with this block") @Desc("Replace it with this block palette")
@DontObfuscate @DontObfuscate
private KList<String> replace = new KList<>(); private IrisMaterialPalette replace = new IrisMaterialPalette();
@Desc("Exactly match the block data or not") @Desc("Exactly match the block data or not")
@DontObfuscate @DontObfuscate
@@ -52,13 +48,8 @@ public class IrisObjectReplace
return findData.aquire(() -> B.getBlockData(find)); return findData.aquire(() -> B.getBlockData(find));
} }
public KList<BlockData> getReplace()
{
return replaceData.aquire(() -> B.getBlockData(replace));
}
public BlockData getReplace(RNG seed, double x, double y, double z) public BlockData getReplace(RNG seed, double x, double y, double z)
{ {
return replaceGen.aquire(() -> NoiseStyle.STATIC.create(seed).bake()).fit(getReplace(), x, y, z); return getReplace().get(seed, x, y, z);
} }
} }