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

BLOCK DATA CUSTOM SUPPORT & FIX DECAYS

This commit is contained in:
Daniel Mills
2020-09-14 08:27:14 -04:00
parent e0a60e3ef3
commit d2ea288009
32 changed files with 348 additions and 1151 deletions

View File

@@ -299,11 +299,11 @@ public class IrisBiome extends IrisRegistrant implements IRare
return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137)).bake().scale(scale).bake());
}
public KList<BlockData> generateLayers(double wx, double wz, RNG random, int maxDepth, int height)
public KList<BlockData> generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisDataManager rdata)
{
if(isLockLayers())
{
return generateLockedLayers(wx, wz, random, maxDepth, height);
return generateLockedLayers(wx, wz, random, maxDepth, height, rdata);
}
KList<BlockData> data = new KList<>();
@@ -315,7 +315,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(int i = 0; i < layers.size(); i++)
{
CNG hgen = getLayerHeightGenerators(random).get(i);
CNG hgen = getLayerHeightGenerators(random, rdata).get(i);
int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom());
if(d < 0)
@@ -332,7 +332,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
try
{
data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom()));
data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom(), rdata));
}
catch(Throwable e)
@@ -350,7 +350,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
return data;
}
public KList<BlockData> generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height)
public KList<BlockData> generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height, IrisDataManager rdata)
{
KList<BlockData> data = new KList<>();
KList<BlockData> real = new KList<>();
@@ -362,7 +362,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(int i = 0; i < layers.size(); i++)
{
CNG hgen = getLayerHeightGenerators(random).get(i);
CNG hgen = getLayerHeightGenerators(random, rdata).get(i);
int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom());
if(d < 0)
@@ -374,7 +374,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
{
try
{
data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom()));
data.add(getLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / layers.get(i).getZoom(), j, (wz - j) / layers.get(i).getZoom(), rdata));
}
catch(Throwable e)
@@ -420,13 +420,13 @@ public class IrisBiome extends IrisRegistrant implements IRare
return this;
}
public KList<BlockData> generateSeaLayers(double wx, double wz, RNG random, int maxDepth)
public KList<BlockData> generateSeaLayers(double wx, double wz, RNG random, int maxDepth, IrisDataManager rdata)
{
KList<BlockData> data = new KList<>();
for(int i = 0; i < seaLayers.size(); i++)
{
CNG hgen = getLayerSeaHeightGenerators(random).get(i);
CNG hgen = getLayerSeaHeightGenerators(random, rdata).get(i);
int d = hgen.fit(seaLayers.get(i).getMinHeight(), seaLayers.get(i).getMaxHeight(), wx / seaLayers.get(i).getZoom(), wz / seaLayers.get(i).getZoom());
if(d < 0)
@@ -443,7 +443,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
try
{
data.add(getSeaLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / seaLayers.get(i).getZoom(), j, (wz - j) / seaLayers.get(i).getZoom()));
data.add(getSeaLayers().get(i).get(random.nextParallelRNG(i + j), (wx + j) / seaLayers.get(i).getZoom(), j, (wz - j) / seaLayers.get(i).getZoom(), rdata));
}
catch(Throwable e)
@@ -461,7 +461,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
return data;
}
public KList<CNG> getLayerHeightGenerators(RNG rng)
public KList<CNG> getLayerHeightGenerators(RNG rng, IrisDataManager rdata)
{
return layerHeightGenerators.aquire(() ->
{
@@ -471,14 +471,14 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(IrisBiomePaletteLayer i : getLayers())
{
layerHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m)));
layerHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m), rdata));
}
return layerHeightGenerators;
});
}
public KList<CNG> getLayerSeaHeightGenerators(RNG rng)
public KList<CNG> getLayerSeaHeightGenerators(RNG rng, IrisDataManager data)
{
return layerSeaHeightGenerators.aquire(() ->
{
@@ -488,7 +488,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
for(IrisBiomePaletteLayer i : getSeaLayers())
{
layerSeaHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m)));
layerSeaHeightGenerators.add(i.getHeightGenerator(rng.nextParallelRNG((m++) * m * m * m), data));
}
return layerSeaHeightGenerators;

View File

@@ -4,6 +4,7 @@ import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.DependsOn;
@@ -92,32 +93,32 @@ public class IrisBiomeDecorator
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
public int getHeight(RNG rng, double x, double z)
public int getHeight(RNG rng, double x, double z, IrisDataManager data)
{
if(stackMin == stackMax)
{
return stackMin;
}
return getHeightGenerator(rng).fit(stackMin, stackMax, x / verticalZoom, z / verticalZoom);
return getHeightGenerator(rng, data).fit(stackMin, stackMax, x / verticalZoom, z / verticalZoom);
}
public CNG getHeightGenerator(RNG rng)
public CNG getHeightGenerator(RNG rng, IrisDataManager data)
{
return heightGenerator.aquire(() ->
{
return heightVariance.create(rng.nextParallelRNG(getBlockData().size() + stackMax + stackMin));
return heightVariance.create(rng.nextParallelRNG(getBlockData(data).size() + stackMax + stackMin));
});
}
public CNG getGenerator(RNG rng)
public CNG getGenerator(RNG rng, IrisDataManager data)
{
return layerGenerator.aquire(() -> style.create(rng.nextParallelRNG((int) (getBlockData().size()))));
return layerGenerator.aquire(() -> style.create(rng.nextParallelRNG((int) (getBlockData(data).size()))));
}
public CNG getVarianceGenerator(RNG rng)
public CNG getVarianceGenerator(RNG rng, IrisDataManager data)
{
return varianceGenerator.aquire(() -> variance.create(rng.nextParallelRNG((int) (getBlockData().size()))).scale(1D / varianceZoom));
return varianceGenerator.aquire(() -> variance.create(rng.nextParallelRNG((int) (getBlockData(data).size()))).scale(1D / varianceZoom));
}
public KList<IrisBlockData> add(String b)
@@ -126,9 +127,9 @@ public class IrisBiomeDecorator
return palette;
}
public BlockData getBlockData(IrisBiome b, RNG rng, double x, double z)
public BlockData getBlockData(IrisBiome b, RNG rng, double x, double z, IrisDataManager data)
{
if(getBlockData().isEmpty())
if(getBlockData(data).isEmpty())
{
Iris.warn("Empty Block Data for " + b.getName());
return null;
@@ -137,27 +138,27 @@ public class IrisBiomeDecorator
double xx = x / getZoom();
double zz = z / getZoom();
if(getGenerator(rng).fitDouble(0D, 1D, xx, zz) <= chance)
if(getGenerator(rng, data).fitDouble(0D, 1D, xx, zz) <= chance)
{
if(getBlockData().size() == 1)
if(getBlockData(data).size() == 1)
{
return getBlockData().get(0);
return getBlockData(data).get(0);
}
return getVarianceGenerator(rng).fit(getBlockData(), xx, zz);
return getVarianceGenerator(rng, data).fit(getBlockData(data), xx, zz);
}
return null;
}
public KList<BlockData> getBlockData()
public KList<BlockData> getBlockData(IrisDataManager data)
{
return blockData.aquire(() ->
{
KList<BlockData> blockData = new KList<>();
for(IrisBlockData i : palette)
{
BlockData bx = i.getBlockData();
BlockData bx = i.getBlockData(data);
if(bx != null)
{
blockData.add(bx);

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.DependsOn;
@@ -59,31 +60,31 @@ public class IrisBiomePaletteLayer
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
public CNG getHeightGenerator(RNG rng)
public CNG getHeightGenerator(RNG rng, IrisDataManager data)
{
return heightGenerator.aquire(() -> CNG.signature(rng.nextParallelRNG(minHeight * maxHeight + getBlockData().size())));
return heightGenerator.aquire(() -> CNG.signature(rng.nextParallelRNG(minHeight * maxHeight + getBlockData(data).size())));
}
public BlockData get(RNG rng, double x, double y, double z)
public BlockData get(RNG rng, double x, double y, double z, IrisDataManager data)
{
if(getBlockData().isEmpty())
if(getBlockData(data).isEmpty())
{
return null;
}
if(getBlockData().size() == 1)
if(getBlockData(data).size() == 1)
{
return getBlockData().get(0);
return getBlockData(data).get(0);
}
return getLayerGenerator(rng).fit(getBlockData(), x / zoom, y / zoom, z / zoom);
return getLayerGenerator(rng, data).fit(getBlockData(data), x / zoom, y / zoom, z / zoom);
}
public CNG getLayerGenerator(RNG rng)
public CNG getLayerGenerator(RNG rng, IrisDataManager data)
{
return layerGenerator.aquire(() ->
{
RNG rngx = rng.nextParallelRNG(minHeight + maxHeight + getBlockData().size());
RNG rngx = rng.nextParallelRNG(minHeight + maxHeight + getBlockData(data).size());
return style.create(rngx);
});
}
@@ -95,14 +96,14 @@ public class IrisBiomePaletteLayer
return palette;
}
public KList<BlockData> getBlockData()
public KList<BlockData> getBlockData(IrisDataManager data)
{
return blockData.aquire(() ->
{
KList<BlockData> blockData = new KList<>();
for(IrisBlockData ix : palette)
{
BlockData bx = ix.getBlockData();
BlockData bx = ix.getBlockData(data);
if(bx != null)
{
for(int i = 0; i < ix.getWeight(); i++)

View File

@@ -2,7 +2,9 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
@@ -15,6 +17,7 @@ import com.volmit.iris.util.Required;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@@ -23,7 +26,8 @@ import lombok.experimental.Accessors;
@AllArgsConstructor
@Desc("Represents Block Data")
@Data
public class IrisBlockData
@EqualsAndHashCode(callSuper = false)
public class IrisBlockData extends IrisRegistrant
{
@RegistryListBlockType
@Required
@@ -31,6 +35,10 @@ public class IrisBlockData
@Desc("The cave zoom. Higher values makes caves spread out further and branch less often, but are thicker.")
private String block = "air";
@Desc("Debug this block by printing it to the console when it's used")
@DontObfuscate
private boolean debug = false;
@DontObfuscate
@Desc("The resource key. Typically Minecraft")
private String key = "minecraft";
@@ -57,28 +65,86 @@ public class IrisBlockData
this.block = b;
}
public String computeProperties()
public String computeProperties(KMap<String, Object> data)
{
if(getData().isEmpty())
if(data.isEmpty())
{
return "";
}
KList<String> r = new KList<>();
for(String i : getData().keySet())
for(String i : data.keySet())
{
r.add(i + "=" + getData().get(i));
r.add(i + "=" + filter(data.get(i).toString()));
}
return "[" + r.toString(",") + "]";
}
public BlockData getBlockData()
public String computeProperties()
{
return computeProperties(getData());
}
public BlockData getBlockData(IrisDataManager data)
{
return blockdata.aquire(() ->
{
BlockData b = B.get(getKey() + ":" + getBlock() + computeProperties());
BlockData b = null;
IrisBlockData customData = data.getBlockLoader().load(getBlock(), false);
if(customData != null)
{
b = customData.getBlockData(data);
if(b != null)
{
b = b.clone();
String st = b.getAsString(true);
if(st.contains("["))
{
st = st.split("\\Q[\\E")[0];
}
KMap<String, Object> cdata = customData.getData().copy();
for(String i : getData().keySet())
{
cdata.put(i, getData().get(i));
}
String sx = getKey() + ":" + st.split("\\Q:\\E")[1] + computeProperties(cdata);
if(debug)
{
Iris.warn("Debug block data " + sx + " (CUSTOM)");
}
BlockData bx = B.get(sx);
if(bx != null)
{
return bx;
}
if(b != null)
{
return b;
}
}
}
String ss = getKey() + ":" + getBlock() + computeProperties();
b = B.get(ss);
if(debug)
{
Iris.warn("Debug block data " + ss);
}
if(b != null)
{
@@ -87,7 +153,7 @@ public class IrisBlockData
if(backup != null)
{
return backup.getBlockData();
return backup.getBlockData(data);
}
return B.get("AIR");
@@ -163,6 +229,16 @@ public class IrisBlockData
}
try
{
return Double.valueOf(string).intValue();
}
catch(Throwable e)
{
}
return string;
}
}

View File

@@ -4,6 +4,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
@@ -47,7 +48,7 @@ public class IrisBlockDrops
private final transient AtomicCache<KList<BlockData>> data = new AtomicCache<>();
public boolean shouldDropFor(BlockData data)
public boolean shouldDropFor(BlockData data, IrisDataManager rdata)
{
KList<BlockData> list = this.data.aquire(() ->
{
@@ -55,7 +56,7 @@ public class IrisBlockDrops
for(IrisBlockData i : getBlocks())
{
BlockData dd = i.getBlockData();
BlockData dd = i.getBlockData(rdata);
if(dd != null)
{

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate;
@@ -41,16 +42,16 @@ public class IrisCaveFluid
private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>();
public boolean hasFluid()
public boolean hasFluid(IrisDataManager rdata)
{
return !B.isAir(getFluid());
return !B.isAir(getFluid(rdata));
}
public BlockData getFluid()
public BlockData getFluid(IrisDataManager rdata)
{
return fluidData.aquire(() ->
{
BlockData b = getFluidType().getBlockData();
BlockData b = getFluidType().getBlockData(rdata);
if(b != null)
{

View File

@@ -7,6 +7,7 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.gen.TopographicTerrainProvider;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc;
@@ -87,7 +88,7 @@ public class IrisDepositGenerator
private final transient AtomicCache<KList<IrisObject>> objects = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
public IrisObject getClump(RNG rng)
public IrisObject getClump(RNG rng, IrisDataManager rdata)
{
KList<IrisObject> objects = this.objects.aquire(() ->
{
@@ -96,7 +97,7 @@ public class IrisDepositGenerator
for(int i = 0; i < varience; i++)
{
objectsf.add(generateClumpObject(rngv.nextParallelRNG(2349 * i + 3598)));
objectsf.add(generateClumpObject(rngv.nextParallelRNG(2349 * i + 3598), rdata));
}
return objectsf;
@@ -109,7 +110,7 @@ public class IrisDepositGenerator
return Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D)));
}
private IrisObject generateClumpObject(RNG rngv)
private IrisObject generateClumpObject(RNG rngv, IrisDataManager rdata)
{
int s = rngv.i(minSize, maxSize);
int dim = Math.min(11, (int) Math.round(Math.pow(maxSize, 1D / 3D)));
@@ -118,7 +119,7 @@ public class IrisDepositGenerator
if(s == 1)
{
o.getBlocks().put(o.getCenter(), nextBlock(rngv));
o.getBlocks().put(o.getCenter(), nextBlock(rngv, rdata));
}
else
@@ -128,19 +129,19 @@ public class IrisDepositGenerator
s--;
BlockVector ang = new BlockVector(rngv.i(-w, w), rngv.i(-w, w), rngv.i(-w, w));
BlockVector pos = o.getCenter().clone().add(ang).toBlockVector();
o.getBlocks().put(pos, nextBlock(rngv));
o.getBlocks().put(pos, nextBlock(rngv, rdata));
}
}
return o;
}
private BlockData nextBlock(RNG rngv)
private BlockData nextBlock(RNG rngv, IrisDataManager rdata)
{
return getBlockData().get(rngv.i(0, getBlockData().size() - 1));
return getBlockData(rdata).get(rngv.i(0, getBlockData(rdata).size() - 1));
}
public KList<BlockData> getBlockData()
public KList<BlockData> getBlockData(IrisDataManager rdata)
{
return blockData.aquire(() ->
{
@@ -148,7 +149,7 @@ public class IrisDepositGenerator
for(IrisBlockData ix : palette)
{
BlockData bx = ix.getBlockData();
BlockData bx = ix.getBlockData(rdata);
if(bx != null)
{
@@ -169,7 +170,7 @@ public class IrisDepositGenerator
{
for(int l = 0; l < rng.i(getMinPerChunk(), getMaxPerChunk()); l++)
{
IrisObject clump = getClump(rng);
IrisObject clump = getClump(rng, g.getData());
int af = (int) Math.ceil(clump.getW() / 2D);
int bf = (int) Math.floor(16D - (clump.getW() / 2D));
@@ -220,7 +221,7 @@ public class IrisDepositGenerator
if(!allow)
{
BlockData b = data.getBlockData(nx, ny, nz);
for(BlockData f : g.getDimension().getRockPalette().getBlockData())
for(BlockData f : g.getDimension().getRockPalette().getBlockData(g.getData()))
{
if(f.getMaterial().equals(b.getMaterial()))
{

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc;
@@ -43,26 +44,26 @@ public class IrisMaterialPalette
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
public BlockData get(RNG rng, double x, double y, double z)
public BlockData get(RNG rng, double x, double y, double z, IrisDataManager rdata)
{
if(getBlockData().isEmpty())
if(getBlockData(rdata).isEmpty())
{
return null;
}
if(getBlockData().size() == 1)
if(getBlockData(rdata).size() == 1)
{
return getBlockData().get(0);
return getBlockData(rdata).get(0);
}
return getLayerGenerator(rng).fit(getBlockData(), x / zoom, y / zoom, z / zoom);
return getLayerGenerator(rng, rdata).fit(getBlockData(rdata), x / zoom, y / zoom, z / zoom);
}
public CNG getLayerGenerator(RNG rng)
public CNG getLayerGenerator(RNG rng, IrisDataManager rdata)
{
return layerGenerator.aquire(() ->
{
RNG rngx = rng.nextParallelRNG(-23498896 + getBlockData().size());
RNG rngx = rng.nextParallelRNG(-23498896 + getBlockData(rdata).size());
return style.create(rngx);
});
}
@@ -81,14 +82,14 @@ public class IrisMaterialPalette
return this;
}
public KList<BlockData> getBlockData()
public KList<BlockData> getBlockData(IrisDataManager rdata)
{
return blockData.aquire(() ->
{
KList<BlockData> blockData = new KList<>();
for(IrisBlockData ix : palette)
{
BlockData bx = ix.getBlockData();
BlockData bx = ix.getBlockData(rdata);
if(bx != null)
{
for(int i = 0; i < ix.getWeight(); i++)

View File

@@ -18,6 +18,7 @@ import org.bukkit.block.data.type.Leaves;
import org.bukkit.util.BlockVector;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.util.B;
import com.volmit.iris.util.BlockPosition;
import com.volmit.iris.util.CarveResult;
@@ -320,30 +321,30 @@ public class IrisObject extends IrisRegistrant
}
}
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, IrisDataManager rdata)
{
if(shitty)
{
return;
}
place(x, -1, z, placer, config, rng);
place(x, -1, z, placer, config, rng,rdata);
}
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, CarveResult c)
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, CarveResult c, IrisDataManager rdata)
{
if(shitty)
{
return;
}
place(x, -1, z, placer, config, rng, null, c);
place(x, -1, z, placer, config, rng, null, c,rdata);
}
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng)
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, IrisDataManager rdata)
{
return place(x, yv, z, placer, config, rng, null, null);
return place(x, yv, z, placer, config, rng, null, null,rdata);
}
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener, CarveResult c)
public int place(int x, int yv, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener, CarveResult c, IrisDataManager rdata)
{
if(config.isSmartBore())
{
@@ -522,11 +523,11 @@ public class IrisObject extends IrisRegistrant
for(IrisObjectReplace j : config.getEdit())
{
for(BlockData k : j.getFind())
for(BlockData k : j.getFind(rdata))
{
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();
data = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z,rdata).clone();
}
}
}

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.util.ArrayType;
import com.volmit.iris.util.Desc;
@@ -42,7 +43,7 @@ public class IrisObjectReplace
private final transient AtomicCache<KList<BlockData>> findData = new AtomicCache<>();
private final transient AtomicCache<KList<BlockData>> replaceData = new AtomicCache<>();
public KList<BlockData> getFind()
public KList<BlockData> getFind(IrisDataManager rdata)
{
return findData.aquire(() ->
{
@@ -50,7 +51,7 @@ public class IrisObjectReplace
for(IrisBlockData i : find)
{
BlockData bx = i.getBlockData();
BlockData bx = i.getBlockData(rdata);
if(bx != null)
{
@@ -62,8 +63,8 @@ public class IrisObjectReplace
});
}
public BlockData getReplace(RNG seed, double x, double y, double z)
public BlockData getReplace(RNG seed, double x, double y, double z, IrisDataManager rdata)
{
return getReplace().get(seed, x, y, z);
return getReplace().get(seed, x, y, z, rdata);
}
}

View File

@@ -144,7 +144,17 @@ public class IrisStructurePlacement
}
o = o != null ? 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, (gg) -> g.getParallaxChunk(gg.getChunkX(), gg.getChunkZ()).setStructure(gg.getY(), t.getStructure(), t.getTile()), null);
o.place(
Math.floorDiv(i, s) * s,
height == -1 ? -1 : h,
Math.floorDiv(j, s) * s,
g,
t.getPlacement(),
rng,
(gg) -> g.getParallaxChunk(gg.getChunkX(), gg.getChunkZ()).setStructure(gg.getY(), t.getStructure(), t.getTile()),
null,
g.getData()
);
}
}

View File

@@ -142,6 +142,6 @@ public class IrisTextRenderer
public void place(ParallaxTerrainProvider g, RNG rng, IrisObjectPlacement config, int xb, int zb)
{
getObjects(g, rng).get(rng.nextInt(getObjects(g, rng).size())).place(xb, zb, g, config, rng);
getObjects(g, rng).get(rng.nextInt(getObjects(g, rng).size())).place(xb, zb, g, config, rng, g.getData());
}
}