mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-30 12:29:20 +00:00
Schemas
This commit is contained in:
@@ -17,6 +17,7 @@ import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -85,6 +86,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
|
||||
@Desc("If this biome has children biomes, and the gen layer chooses one of this biomes children, How will it be shaped?")
|
||||
private IrisGeneratorStyle childStyle = NoiseStyle.CELLULAR_IRIS_DOUBLE.style();
|
||||
|
||||
@RegistryListBiome
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
@Desc("List any biome names (file names without.json) here as children. Portions of this biome can sometimes morph into their children. Iris supports cyclic relationships such as A > B > A > B. Iris will stop checking 9 biomes down the tree.")
|
||||
|
||||
@@ -9,18 +9,21 @@ import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.IrisInterpolation;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RegistryListGenerator;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Desc("This represents a link to a generator for a biome")
|
||||
@Data
|
||||
public class IrisBiomeGeneratorLink {
|
||||
public class IrisBiomeGeneratorLink
|
||||
{
|
||||
@RegistryListGenerator
|
||||
@DontObfuscate
|
||||
@Desc("The generator id")
|
||||
private String generator = "default";
|
||||
|
||||
@DependsOn({ "min", "max" })
|
||||
@DependsOn({"min", "max"})
|
||||
@Required
|
||||
@MinNumber(-256)
|
||||
@MaxNumber(256)
|
||||
@@ -28,7 +31,7 @@ public class IrisBiomeGeneratorLink {
|
||||
@Desc("The min block value (value + fluidHeight)")
|
||||
private int min = 0;
|
||||
|
||||
@DependsOn({ "min", "max" })
|
||||
@DependsOn({"min", "max"})
|
||||
@Required
|
||||
@MinNumber(-256)
|
||||
@MaxNumber(256)
|
||||
@@ -38,16 +41,19 @@ public class IrisBiomeGeneratorLink {
|
||||
|
||||
private transient AtomicCache<IrisGenerator> gen = new AtomicCache<>();
|
||||
|
||||
public IrisBiomeGeneratorLink() {
|
||||
public IrisBiomeGeneratorLink()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public IrisGenerator getCachedGenerator(ContextualChunkGenerator g) {
|
||||
return gen.aquire(() -> {
|
||||
IrisGenerator gen = g != null ? g.loadGenerator(getGenerator())
|
||||
: Iris.globaldata.getGeneratorLoader().load(getGenerator());
|
||||
public IrisGenerator getCachedGenerator(ContextualChunkGenerator g)
|
||||
{
|
||||
return gen.aquire(() ->
|
||||
{
|
||||
IrisGenerator gen = g != null ? g.loadGenerator(getGenerator()) : Iris.globaldata.getGeneratorLoader().load(getGenerator());
|
||||
|
||||
if (gen == null) {
|
||||
if(gen == null)
|
||||
{
|
||||
gen = new IrisGenerator();
|
||||
}
|
||||
|
||||
@@ -55,7 +61,8 @@ public class IrisBiomeGeneratorLink {
|
||||
});
|
||||
}
|
||||
|
||||
public double getHeight(ContextualChunkGenerator xg, double x, double z, long seed) {
|
||||
public double getHeight(ContextualChunkGenerator xg, double x, double z, long seed)
|
||||
{
|
||||
double g = getCachedGenerator(xg).getHeight(x, z, seed);
|
||||
g = g < 0 ? 0 : g;
|
||||
g = g > 1 ? 1 : g;
|
||||
|
||||
@@ -9,6 +9,8 @@ import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.RegistryListObject;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -17,12 +19,14 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IrisBiomeMutation
|
||||
{
|
||||
@RegistryListBiome
|
||||
@Required
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
@Desc("One of The following biomes or regions must show up")
|
||||
private KList<String> sideA = new KList<>();
|
||||
|
||||
@RegistryListBiome
|
||||
@Required
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
@@ -43,6 +47,7 @@ public class IrisBiomeMutation
|
||||
@Desc("How many tries per chunk to check for this mutation")
|
||||
private int checks = 2;
|
||||
|
||||
@RegistryListObject
|
||||
@ArrayType(min = 1, type = IrisObjectPlacement.class)
|
||||
@DontObfuscate
|
||||
@Desc("Objects define what schematics (iob files) iris will place in this biome mutation")
|
||||
|
||||
@@ -21,6 +21,9 @@ import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.RegistryListDimension;
|
||||
import com.volmit.iris.util.RegistryListRegion;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -160,6 +163,7 @@ public class IrisDimension extends IrisRegistrant
|
||||
@Desc("Compatability filters")
|
||||
private KList<IrisCompatabilityFilter> compatability = getDefaultCompatability();
|
||||
|
||||
@RegistryListDimension
|
||||
@DontObfuscate
|
||||
@Desc("The ceiling dimension. Leave blank for normal sky.")
|
||||
private String ceiling = "";
|
||||
@@ -173,6 +177,7 @@ public class IrisDimension extends IrisRegistrant
|
||||
@Desc("The world environment")
|
||||
private Environment environment = Environment.NORMAL;
|
||||
|
||||
@RegistryListRegion
|
||||
@Required
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
@@ -186,6 +191,7 @@ public class IrisDimension extends IrisRegistrant
|
||||
@Desc("The fluid height for this dimension")
|
||||
private int fluidHeight = 63;
|
||||
|
||||
@RegistryListBiome
|
||||
@DontObfuscate
|
||||
@Desc("Keep this either undefined or empty. Setting any biome name into this will force iris to only generate the specified biome. Great for testing.")
|
||||
private String focus = "";
|
||||
|
||||
@@ -12,6 +12,7 @@ import java.io.OutputStream;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.Waterlogged;
|
||||
import org.bukkit.block.data.type.Leaves;
|
||||
import org.bukkit.util.BlockVector;
|
||||
|
||||
@@ -26,21 +27,19 @@ import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class IrisObject extends IrisRegistrant {
|
||||
public class IrisObject extends IrisRegistrant
|
||||
{
|
||||
private static final Material SNOW = Material.SNOW;
|
||||
private static final BlockData AIR = B.getBlockData("CAVE_AIR");
|
||||
private static final BlockData[] SNOW_LAYERS = new BlockData[] { B.getBlockData("minecraft:snow[layers=1]"),
|
||||
B.getBlockData("minecraft:snow[layers=2]"), B.getBlockData("minecraft:snow[layers=3]"),
|
||||
B.getBlockData("minecraft:snow[layers=4]"), B.getBlockData("minecraft:snow[layers=5]"),
|
||||
B.getBlockData("minecraft:snow[layers=6]"), B.getBlockData("minecraft:snow[layers=7]"),
|
||||
B.getBlockData("minecraft:snow[layers=8]") };
|
||||
private static final BlockData[] SNOW_LAYERS = new BlockData[] {B.getBlockData("minecraft:snow[layers=1]"), B.getBlockData("minecraft:snow[layers=2]"), B.getBlockData("minecraft:snow[layers=3]"), B.getBlockData("minecraft:snow[layers=4]"), B.getBlockData("minecraft:snow[layers=5]"), B.getBlockData("minecraft:snow[layers=6]"), B.getBlockData("minecraft:snow[layers=7]"), B.getBlockData("minecraft:snow[layers=8]")};
|
||||
private KMap<BlockVector, BlockData> blocks;
|
||||
private int w;
|
||||
private int d;
|
||||
private int h;
|
||||
private transient BlockVector center;
|
||||
|
||||
public IrisObject(int w, int h, int d) {
|
||||
public IrisObject(int w, int h, int d)
|
||||
{
|
||||
blocks = new KMap<>();
|
||||
this.w = w;
|
||||
this.h = h;
|
||||
@@ -48,7 +47,8 @@ public class IrisObject extends IrisRegistrant {
|
||||
center = new BlockVector(w / 2, h / 2, d / 2);
|
||||
}
|
||||
|
||||
public static BlockVector sampleSize(File file) throws IOException {
|
||||
public static BlockVector sampleSize(File file) throws IOException
|
||||
{
|
||||
FileInputStream in = new FileInputStream(file);
|
||||
DataInputStream din = new DataInputStream(in);
|
||||
BlockVector bv = new BlockVector(din.readInt(), din.readInt(), din.readInt());
|
||||
@@ -56,7 +56,8 @@ public class IrisObject extends IrisRegistrant {
|
||||
return bv;
|
||||
}
|
||||
|
||||
public void read(InputStream in) throws IOException {
|
||||
public void read(InputStream in) throws IOException
|
||||
{
|
||||
DataInputStream din = new DataInputStream(in);
|
||||
this.w = din.readInt();
|
||||
this.h = din.readInt();
|
||||
@@ -64,32 +65,36 @@ public class IrisObject extends IrisRegistrant {
|
||||
center = new BlockVector(w / 2, h / 2, d / 2);
|
||||
int s = din.readInt();
|
||||
|
||||
for (int i = 0; i < s; i++) {
|
||||
blocks.put(new BlockVector(din.readShort(), din.readShort(), din.readShort()),
|
||||
B.getBlockData(din.readUTF()));
|
||||
for(int i = 0; i < s; i++)
|
||||
{
|
||||
blocks.put(new BlockVector(din.readShort(), din.readShort(), din.readShort()), B.getBlockData(din.readUTF()));
|
||||
}
|
||||
}
|
||||
|
||||
public void read(File file) throws IOException {
|
||||
public void read(File file) throws IOException
|
||||
{
|
||||
FileInputStream fin = new FileInputStream(file);
|
||||
read(fin);
|
||||
fin.close();
|
||||
}
|
||||
|
||||
public void write(File file) throws IOException {
|
||||
public void write(File file) throws IOException
|
||||
{
|
||||
file.getParentFile().mkdirs();
|
||||
FileOutputStream out = new FileOutputStream(file);
|
||||
write(out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
public void write(OutputStream o) throws IOException {
|
||||
public void write(OutputStream o) throws IOException
|
||||
{
|
||||
DataOutputStream dos = new DataOutputStream(o);
|
||||
dos.writeInt(w);
|
||||
dos.writeInt(h);
|
||||
dos.writeInt(d);
|
||||
dos.writeInt(blocks.size());
|
||||
for (BlockVector i : blocks.k()) {
|
||||
for(BlockVector i : blocks.k())
|
||||
{
|
||||
dos.writeShort(i.getBlockX());
|
||||
dos.writeShort(i.getBlockY());
|
||||
dos.writeShort(i.getBlockZ());
|
||||
@@ -97,68 +102,102 @@ public class IrisObject extends IrisRegistrant {
|
||||
}
|
||||
}
|
||||
|
||||
public void setUnsigned(int x, int y, int z, BlockData block) {
|
||||
if (x >= w || y >= h || z >= d) {
|
||||
public void setUnsigned(int x, int y, int z, BlockData block)
|
||||
{
|
||||
if(x >= w || y >= h || z >= d)
|
||||
{
|
||||
throw new RuntimeException(x + " " + y + " " + z + " exceeds limit of " + w + " " + h + " " + d);
|
||||
}
|
||||
|
||||
BlockVector v = new BlockVector(x, y, z).subtract(center).toBlockVector();
|
||||
|
||||
if (block == null) {
|
||||
if(block == null)
|
||||
{
|
||||
blocks.remove(v);
|
||||
}
|
||||
|
||||
else {
|
||||
else
|
||||
{
|
||||
blocks.put(v, block);
|
||||
}
|
||||
}
|
||||
|
||||
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng) {
|
||||
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng)
|
||||
{
|
||||
place(x, -1, z, placer, config, rng);
|
||||
}
|
||||
|
||||
public void place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng) {
|
||||
public void place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng)
|
||||
{
|
||||
int spinx = rng.imax() / 1000;
|
||||
int spiny = rng.imax() / 1000;
|
||||
int spinz = rng.imax() / 1000;
|
||||
int y = yv < 0 ? placer.getHighest(x, z, config.isUnderwater()) + config.getRotation()
|
||||
.rotate(new BlockVector(0, getCenter().getBlockY(), 0), spinx, spiny, spinz).getBlockY() : yv;
|
||||
int rty = config.getRotation().rotate(new BlockVector(0, getCenter().getBlockY(), 0), spinx, spiny, spinz).getBlockY();
|
||||
int ty = config.getTranslate().translate(new BlockVector(0, getCenter().getBlockY(), 0), config.getRotation(), spinx, spiny, spinz).getBlockY();
|
||||
int y = yv < 0 ? placer.getHighest(x, z, config.isUnderwater()) + rty : yv;
|
||||
|
||||
if (yv >= 0 && config.isBottom()) {
|
||||
if(yv >= 0 && config.isBottom())
|
||||
{
|
||||
y += Math.floorDiv(h, 2);
|
||||
}
|
||||
|
||||
KMap<ChunkPosition, Integer> heightmap = config.getSnow() > 0 ? new KMap<>() : null;
|
||||
|
||||
if (yv < 0) {
|
||||
if (!config.isUnderwater() && !config.isOnwater() && placer.isUnderwater(x, z)) {
|
||||
if(yv < 0)
|
||||
{
|
||||
if(!config.isUnderwater() && !config.isOnwater() && placer.isUnderwater(x, z))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (config.isBore()) {
|
||||
for (int i = x - Math.floorDiv(w, 2); i <= x + Math.floorDiv(w, 2) - (w % 2 == 0 ? 1 : 0); i++) {
|
||||
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) - (d % 2 == 0 ? 1 : 0); k++) {
|
||||
if(config.isUnderwater() && y + rty + ty >= placer.getFluidHeight())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(!config.getClamp().canPlace(y + rty + ty, y - rty + ty))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(config.isBore())
|
||||
{
|
||||
for(int i = x - Math.floorDiv(w, 2); i <= x + Math.floorDiv(w, 2) - (w % 2 == 0 ? 1 : 0); i++)
|
||||
{
|
||||
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) - (d % 2 == 0 ? 1 : 0); k++)
|
||||
{
|
||||
placer.set(i, j, k, AIR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (BlockVector g : blocks.keySet()) {
|
||||
for(BlockVector g : blocks.keySet())
|
||||
{
|
||||
BlockVector i = g.clone();
|
||||
i = config.getRotation().rotate(i.clone(), spinx, spiny, spinz).clone();
|
||||
i = config.getTranslate().translate(i.clone(), config.getRotation(), spinx, spiny, spinz).clone();
|
||||
BlockData data = blocks.get(g).clone();
|
||||
|
||||
if (placer.isPreventingDecay() && data instanceof Leaves && !((Leaves) data).isPersistent()) {
|
||||
if(placer.isPreventingDecay() && data instanceof Leaves && !((Leaves) data).isPersistent())
|
||||
{
|
||||
((Leaves) data).setPersistent(true);
|
||||
}
|
||||
|
||||
for (IrisObjectReplace j : config.getEdit()) {
|
||||
if (j.isExact() ? j.getFind().matches(data) : j.getFind().getMaterial().equals(data.getMaterial())) {
|
||||
data = j.getReplace();
|
||||
for(IrisObjectReplace j : config.getEdit())
|
||||
{
|
||||
if(j.isExact())
|
||||
{
|
||||
for(BlockData k : j.getFind())
|
||||
{
|
||||
if(j.isExact() ? k.matches(data) : k.getMaterial().equals(data.getMaterial()))
|
||||
{
|
||||
data = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z).clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,36 +206,49 @@ public class IrisObject extends IrisRegistrant {
|
||||
int yy = y + (int) Math.round(i.getY());
|
||||
int zz = z + (int) Math.round(i.getZ());
|
||||
|
||||
if (heightmap != null) {
|
||||
if(heightmap != null)
|
||||
{
|
||||
ChunkPosition pos = new ChunkPosition(xx, zz);
|
||||
|
||||
if (!heightmap.containsKey(pos)) {
|
||||
if(!heightmap.containsKey(pos))
|
||||
{
|
||||
heightmap.put(pos, yy);
|
||||
}
|
||||
|
||||
if (heightmap.get(pos) < yy) {
|
||||
if(heightmap.get(pos) < yy)
|
||||
{
|
||||
heightmap.put(pos, yy);
|
||||
}
|
||||
}
|
||||
|
||||
if (config.isMeld() && !placer.isSolid(xx, yy, zz)) {
|
||||
if(config.isMeld() && !placer.isSolid(xx, yy, zz))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(yy <= placer.getFluidHeight() && data instanceof Waterlogged)
|
||||
{
|
||||
((Waterlogged) data).setWaterlogged(true);
|
||||
}
|
||||
|
||||
placer.set(xx, yy, zz, data);
|
||||
}
|
||||
|
||||
if (heightmap != null) {
|
||||
if(heightmap != null)
|
||||
{
|
||||
RNG rngx = rng.nextParallelRNG(3468854);
|
||||
|
||||
for (ChunkPosition i : heightmap.k()) {
|
||||
for(ChunkPosition i : heightmap.k())
|
||||
{
|
||||
int vx = i.getX();
|
||||
int vy = heightmap.get(i);
|
||||
int vz = i.getZ();
|
||||
|
||||
if (config.getSnow() > 0) {
|
||||
if(config.getSnow() > 0)
|
||||
{
|
||||
BlockData bd = placer.get(vx, vy, vz);
|
||||
if (bd != null && bd.getMaterial().equals(SNOW)) {
|
||||
if(bd != null && bd.getMaterial().equals(SNOW))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -207,8 +259,10 @@ public class IrisObject extends IrisRegistrant {
|
||||
}
|
||||
}
|
||||
|
||||
public void place(Location at) {
|
||||
for (BlockVector i : blocks.keySet()) {
|
||||
public void place(Location at)
|
||||
{
|
||||
for(BlockVector i : blocks.keySet())
|
||||
{
|
||||
at.clone().add(0, getCenter().getY(), 0).add(i).getBlock().setBlockData(blocks.get(i), false);
|
||||
}
|
||||
}
|
||||
|
||||
40
src/main/java/com/volmit/iris/object/IrisObjectLimit.java
Normal file
40
src/main/java/com/volmit/iris/object/IrisObjectLimit.java
Normal file
@@ -0,0 +1,40 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Desc("Translate objects")
|
||||
@Data
|
||||
public class IrisObjectLimit
|
||||
{
|
||||
@MinNumber(0)
|
||||
@MaxNumber(255)
|
||||
@DontObfuscate
|
||||
@Desc("The minimum height for placement (bottom of object)")
|
||||
private int minimumHeight = 0;
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(255)
|
||||
@DontObfuscate
|
||||
@Desc("The maximum height for placement (top of object)")
|
||||
private int maximumHeight = 255;
|
||||
|
||||
public IrisObjectLimit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public boolean canPlace(int h, int l)
|
||||
{
|
||||
if(h > maximumHeight || l < minimumHeight)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListObject;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -17,6 +18,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IrisObjectPlacement
|
||||
{
|
||||
@RegistryListObject
|
||||
@Required
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
@@ -36,6 +38,10 @@ public class IrisObjectPlacement
|
||||
@Desc("Rotate this objects placement")
|
||||
private IrisObjectRotation rotation = new IrisObjectRotation();
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Limit the max height or min height of placement.")
|
||||
private IrisObjectLimit clamp = new IrisObjectLimit();
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(1)
|
||||
@DontObfuscate
|
||||
|
||||
@@ -3,9 +3,13 @@ package com.volmit.iris.object;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import com.volmit.iris.gen.atomics.AtomicCache;
|
||||
import com.volmit.iris.noise.CNG;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -14,35 +18,43 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IrisObjectReplace
|
||||
{
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@Required
|
||||
@Desc("Find this block")
|
||||
@DontObfuscate
|
||||
private String find;
|
||||
private KList<String> find;
|
||||
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@Required
|
||||
@Desc("Replace it with this block")
|
||||
@DontObfuscate
|
||||
private String replace;
|
||||
private KList<String> replace;
|
||||
|
||||
@Desc("Exactly match the block data or not")
|
||||
@DontObfuscate
|
||||
private boolean exact = false;
|
||||
|
||||
private transient AtomicCache<BlockData> findData = new AtomicCache<>();
|
||||
private transient AtomicCache<BlockData> replaceData = new AtomicCache<>();
|
||||
private transient AtomicCache<CNG> replaceGen = new AtomicCache<>();
|
||||
private transient AtomicCache<KList<BlockData>> findData = new AtomicCache<>();
|
||||
private transient AtomicCache<KList<BlockData>> replaceData = new AtomicCache<>();
|
||||
|
||||
public IrisObjectReplace()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public BlockData getFind()
|
||||
public KList<BlockData> getFind()
|
||||
{
|
||||
return findData.aquire(() -> B.getBlockData(find));
|
||||
}
|
||||
|
||||
public BlockData getReplace()
|
||||
public KList<BlockData> getReplace()
|
||||
{
|
||||
return replaceData.aquire(() -> B.getBlockData(replace));
|
||||
}
|
||||
|
||||
public BlockData getReplace(RNG seed, double x, double y, double z)
|
||||
{
|
||||
return replaceGen.aquire(() -> NoiseStyle.STATIC.create(seed).bake()).fit(getReplace(), x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -15,6 +16,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IrisRegionRidge
|
||||
{
|
||||
@RegistryListBiome
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The biome name")
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListBiome;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -14,6 +15,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IrisRegionSpot
|
||||
{
|
||||
@RegistryListBiome
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The biome to be placed")
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.RegistryListStructure;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -18,6 +19,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class IrisStructurePlacement
|
||||
{
|
||||
@RegistryListStructure
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The structure tileset to use")
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.RegistryListObject;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
@@ -45,6 +46,7 @@ public class IrisStructureTile
|
||||
@Desc("Is this structure allowed to place if there is supposed to be a west wall?")
|
||||
private StructureTileCondition west = StructureTileCondition.AGNOSTIC;
|
||||
|
||||
@RegistryListObject
|
||||
@Required
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
|
||||
Reference in New Issue
Block a user