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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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()))
|
||||
{
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user