mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-30 12:29:20 +00:00
Faster block data!
This commit is contained in:
@@ -3,7 +3,6 @@ package com.volmit.iris.object;
|
||||
import java.awt.Color;
|
||||
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.gen.ContextualTerrainProvider;
|
||||
@@ -15,6 +14,7 @@ import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.DependsOn;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.IRare;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KMap;
|
||||
@@ -349,14 +349,14 @@ 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, IrisDataManager rdata)
|
||||
public KList<FastBlockData> generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisDataManager rdata)
|
||||
{
|
||||
if(isLockLayers())
|
||||
{
|
||||
return generateLockedLayers(wx, wz, random, maxDepth, height, rdata);
|
||||
}
|
||||
|
||||
KList<BlockData> data = new KList<>();
|
||||
KList<FastBlockData> data = new KList<>();
|
||||
|
||||
if(maxDepth <= 0)
|
||||
{
|
||||
@@ -400,10 +400,10 @@ public class IrisBiome extends IrisRegistrant implements IRare
|
||||
return data;
|
||||
}
|
||||
|
||||
public KList<BlockData> generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height, IrisDataManager rdata)
|
||||
public KList<FastBlockData> generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height, IrisDataManager rdata)
|
||||
{
|
||||
KList<BlockData> data = new KList<>();
|
||||
KList<BlockData> real = new KList<>();
|
||||
KList<FastBlockData> data = new KList<>();
|
||||
KList<FastBlockData> real = new KList<>();
|
||||
int maxDepth = Math.min(maxDepthf, getLockLayersMax());
|
||||
if(maxDepth <= 0)
|
||||
{
|
||||
@@ -470,9 +470,9 @@ public class IrisBiome extends IrisRegistrant implements IRare
|
||||
return this;
|
||||
}
|
||||
|
||||
public KList<BlockData> generateSeaLayers(double wx, double wz, RNG random, int maxDepth, IrisDataManager rdata)
|
||||
public KList<FastBlockData> generateSeaLayers(double wx, double wz, RNG random, int maxDepth, IrisDataManager rdata)
|
||||
{
|
||||
KList<BlockData> data = new KList<>();
|
||||
KList<FastBlockData> data = new KList<>();
|
||||
|
||||
for(int i = 0; i < seaLayers.size(); i++)
|
||||
{
|
||||
@@ -660,7 +660,7 @@ public class IrisBiome extends IrisRegistrant implements IRare
|
||||
return getBiomeGenerator(rng).fit(biomeScatter, x, y, z);
|
||||
}
|
||||
|
||||
public BlockData getSurfaceBlock(int x, int z, RNG rng, IrisDataManager idm)
|
||||
public FastBlockData getSurfaceBlock(int x, int z, RNG rng, IrisDataManager idm)
|
||||
{
|
||||
if(getLayers().isEmpty())
|
||||
{
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
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;
|
||||
@@ -10,6 +8,7 @@ import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.DependsOn;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
@@ -91,7 +90,7 @@ public class IrisBiomeDecorator
|
||||
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> varianceGenerator = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<FastBlockData>> blockData = new AtomicCache<>();
|
||||
|
||||
public int getHeight(RNG rng, double x, double z, IrisDataManager data)
|
||||
{
|
||||
@@ -127,7 +126,7 @@ public class IrisBiomeDecorator
|
||||
return palette;
|
||||
}
|
||||
|
||||
public BlockData getBlockData(IrisBiome b, RNG rng, double x, double z, IrisDataManager data)
|
||||
public FastBlockData getBlockData(IrisBiome b, RNG rng, double x, double z, IrisDataManager data)
|
||||
{
|
||||
if(getBlockData(data).isEmpty())
|
||||
{
|
||||
@@ -151,14 +150,14 @@ public class IrisBiomeDecorator
|
||||
return null;
|
||||
}
|
||||
|
||||
public KList<BlockData> getBlockData(IrisDataManager data)
|
||||
public KList<FastBlockData> getBlockData(IrisDataManager data)
|
||||
{
|
||||
return blockData.aquire(() ->
|
||||
{
|
||||
KList<BlockData> blockData = new KList<>();
|
||||
KList<FastBlockData> blockData = new KList<>();
|
||||
for(IrisBlockData i : palette)
|
||||
{
|
||||
BlockData bx = i.getBlockData(data);
|
||||
FastBlockData bx = i.getBlockData(data);
|
||||
if(bx != null)
|
||||
{
|
||||
blockData.add(bx);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
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;
|
||||
@@ -9,6 +7,7 @@ import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.DependsOn;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
@@ -56,7 +55,7 @@ public class IrisBiomePaletteLayer
|
||||
@Desc("The palette of blocks to be used in this layer")
|
||||
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<FastBlockData>> blockData = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> layerGenerator = new AtomicCache<>();
|
||||
private final transient AtomicCache<CNG> heightGenerator = new AtomicCache<>();
|
||||
|
||||
@@ -65,7 +64,7 @@ public class IrisBiomePaletteLayer
|
||||
return heightGenerator.aquire(() -> CNG.signature(rng.nextParallelRNG(minHeight * maxHeight + getBlockData(data).size())));
|
||||
}
|
||||
|
||||
public BlockData get(RNG rng, double x, double y, double z, IrisDataManager data)
|
||||
public FastBlockData get(RNG rng, double x, double y, double z, IrisDataManager data)
|
||||
{
|
||||
if(getBlockData(data).isEmpty())
|
||||
{
|
||||
@@ -96,14 +95,14 @@ public class IrisBiomePaletteLayer
|
||||
return palette;
|
||||
}
|
||||
|
||||
public KList<BlockData> getBlockData(IrisDataManager data)
|
||||
public KList<FastBlockData> getBlockData(IrisDataManager data)
|
||||
{
|
||||
return blockData.aquire(() ->
|
||||
{
|
||||
KList<BlockData> blockData = new KList<>();
|
||||
KList<FastBlockData> blockData = new KList<>();
|
||||
for(IrisBlockData ix : palette)
|
||||
{
|
||||
BlockData bx = ix.getBlockData(data);
|
||||
FastBlockData bx = ix.getBlockData(data);
|
||||
if(bx != null)
|
||||
{
|
||||
for(int i = 0; i < ix.getWeight(); i++)
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
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;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KMap;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
@@ -57,7 +56,7 @@ public class IrisBlockData extends IrisRegistrant
|
||||
@Desc("Optional properties for this block data such as 'waterlogged': true")
|
||||
private KMap<String, Object> data = new KMap<>();
|
||||
|
||||
private final transient AtomicCache<BlockData> blockdata = new AtomicCache<>();
|
||||
private final transient AtomicCache<FastBlockData> blockdata = new AtomicCache<>();
|
||||
private final transient AtomicCache<String> realProperties = new AtomicCache<>();
|
||||
|
||||
public IrisBlockData(String b)
|
||||
@@ -87,11 +86,11 @@ public class IrisBlockData extends IrisRegistrant
|
||||
return computeProperties(getData());
|
||||
}
|
||||
|
||||
public BlockData getBlockData(IrisDataManager data)
|
||||
public FastBlockData getBlockData(IrisDataManager data)
|
||||
{
|
||||
return blockdata.aquire(() ->
|
||||
{
|
||||
BlockData b = null;
|
||||
FastBlockData b = null;
|
||||
|
||||
IrisBlockData customData = data.getBlockLoader().load(getBlock(), false);
|
||||
|
||||
@@ -103,7 +102,7 @@ public class IrisBlockData extends IrisRegistrant
|
||||
{
|
||||
b = b.clone();
|
||||
|
||||
String st = b.getAsString(true);
|
||||
String st = b.getBlockData().getAsString(true);
|
||||
|
||||
if(st.contains("["))
|
||||
{
|
||||
@@ -124,7 +123,7 @@ public class IrisBlockData extends IrisRegistrant
|
||||
Iris.warn("Debug block data " + sx + " (CUSTOM)");
|
||||
}
|
||||
|
||||
BlockData bx = B.get(sx);
|
||||
FastBlockData bx = B.get(sx);
|
||||
|
||||
if(bx != null)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.volmit.iris.gen.atomics.AtomicCache;
|
||||
@@ -8,6 +7,7 @@ import com.volmit.iris.manager.IrisDataManager;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
@@ -46,17 +46,17 @@ public class IrisBlockDrops
|
||||
@Desc("Removes the default vanilla block drops and only drops the given items & any parent loot tables specified for this block type.")
|
||||
private boolean replaceVanillaDrops = false;
|
||||
|
||||
private final transient AtomicCache<KList<BlockData>> data = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<FastBlockData>> data = new AtomicCache<>();
|
||||
|
||||
public boolean shouldDropFor(BlockData data, IrisDataManager rdata)
|
||||
public boolean shouldDropFor(FastBlockData data, IrisDataManager rdata)
|
||||
{
|
||||
KList<BlockData> list = this.data.aquire(() ->
|
||||
KList<FastBlockData> list = this.data.aquire(() ->
|
||||
{
|
||||
KList<BlockData> b = new KList<>();
|
||||
KList<FastBlockData> b = new KList<>();
|
||||
|
||||
for(IrisBlockData i : getBlocks())
|
||||
{
|
||||
BlockData dd = i.getBlockData(rdata);
|
||||
FastBlockData dd = i.getBlockData(rdata);
|
||||
|
||||
if(dd != null)
|
||||
{
|
||||
@@ -67,7 +67,7 @@ public class IrisBlockDrops
|
||||
return b.removeDuplicates();
|
||||
});
|
||||
|
||||
for(BlockData i : list)
|
||||
for(FastBlockData i : list)
|
||||
{
|
||||
if(exactBlocks ? i.equals(data) : i.getMaterial().equals(data.getMaterial()))
|
||||
{
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
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;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.Required;
|
||||
@@ -40,18 +39,18 @@ public class IrisCaveFluid
|
||||
@Desc("The fluid type that should spawn here")
|
||||
private IrisBlockData fluidType = new IrisBlockData("CAVE_AIR");
|
||||
|
||||
private final transient AtomicCache<BlockData> fluidData = new AtomicCache<>();
|
||||
private final transient AtomicCache<FastBlockData> fluidData = new AtomicCache<>();
|
||||
|
||||
public boolean hasFluid(IrisDataManager rdata)
|
||||
{
|
||||
return !B.isAir(getFluid(rdata));
|
||||
}
|
||||
|
||||
public BlockData getFluid(IrisDataManager rdata)
|
||||
public FastBlockData getFluid(IrisDataManager rdata)
|
||||
{
|
||||
return fluidData.aquire(() ->
|
||||
{
|
||||
BlockData b = getFluidType().getBlockData(rdata);
|
||||
FastBlockData b = getFluidType().getBlockData(rdata);
|
||||
|
||||
if(b != null)
|
||||
{
|
||||
|
||||
@@ -4,11 +4,11 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.IO;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KMap;
|
||||
@@ -20,7 +20,7 @@ public class IrisCompat
|
||||
{
|
||||
private KList<IrisCompatabilityBlockFilter> blockFilters = new KList<>();
|
||||
private KList<IrisCompatabilityItemFilter> itemFilters = new KList<>();
|
||||
private transient KMap<String, BlockData> blockResolves = new KMap<>();
|
||||
private transient KMap<String, FastBlockData> blockResolves = new KMap<>();
|
||||
private transient KMap<String, Material> itemResolves = new KMap<>();
|
||||
|
||||
public IrisCompat()
|
||||
@@ -29,7 +29,7 @@ public class IrisCompat
|
||||
itemFilters = getDefaultItemCompatabilityFilters();
|
||||
}
|
||||
|
||||
public BlockData getBlock(String n)
|
||||
public FastBlockData getBlock(String n)
|
||||
{
|
||||
return blockResolves.compute(n, (k, v) ->
|
||||
{
|
||||
@@ -41,7 +41,7 @@ public class IrisCompat
|
||||
String buf = k;
|
||||
int err = 16;
|
||||
|
||||
BlockData tx = B.parseBlockDataOrNull(buf);
|
||||
FastBlockData tx = B.parseBlockDataOrNull(buf);
|
||||
|
||||
if(tx != null)
|
||||
{
|
||||
@@ -59,7 +59,7 @@ public class IrisCompat
|
||||
{
|
||||
if(i.getWhen().equalsIgnoreCase(buf))
|
||||
{
|
||||
BlockData b = i.getReplace();
|
||||
FastBlockData b = i.getReplace();
|
||||
|
||||
if(b != null)
|
||||
{
|
||||
@@ -121,29 +121,29 @@ public class IrisCompat
|
||||
}
|
||||
|
||||
buf = k;
|
||||
BlockData tx = B.parseBlockDataOrNull(buf);
|
||||
FastBlockData tx = B.parseBlockDataOrNull(buf);
|
||||
|
||||
if(tx != null)
|
||||
{
|
||||
return tx.getMaterial();
|
||||
return tx.getType();
|
||||
}
|
||||
|
||||
searching: while(true)
|
||||
{
|
||||
if(err-- <= 0)
|
||||
{
|
||||
return B.parseBlockDataOrNull("STONE").getMaterial();
|
||||
return B.parseBlockDataOrNull("STONE").getType();
|
||||
}
|
||||
|
||||
for(IrisCompatabilityBlockFilter i : blockFilters)
|
||||
{
|
||||
if(i.getWhen().equalsIgnoreCase(buf))
|
||||
{
|
||||
BlockData b = i.getReplace();
|
||||
FastBlockData b = i.getReplace();
|
||||
|
||||
if(b != null)
|
||||
{
|
||||
return b.getMaterial();
|
||||
return b.getType();
|
||||
}
|
||||
|
||||
buf = i.getSupplement();
|
||||
@@ -151,7 +151,7 @@ public class IrisCompat
|
||||
}
|
||||
}
|
||||
|
||||
return B.parseBlockDataOrNull("STONE").getMaterial();
|
||||
return B.parseBlockDataOrNull("STONE").getType();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
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.util.B;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -35,31 +34,30 @@ public class IrisCompatabilityBlockFilter
|
||||
@Desc("If exact is true, it compares block data for example minecraft:some_log[axis=x]")
|
||||
private boolean exact = false;
|
||||
|
||||
private final transient AtomicCache<BlockData> findData = new AtomicCache<>(true);
|
||||
private final transient AtomicCache<BlockData> replaceData = new AtomicCache<>(true);
|
||||
private final transient AtomicCache<FastBlockData> findData = new AtomicCache<>(true);
|
||||
private final transient AtomicCache<FastBlockData> replaceData = new AtomicCache<>(true);
|
||||
|
||||
public IrisCompatabilityBlockFilter(String when, String supplement)
|
||||
{
|
||||
this(when, supplement, false);
|
||||
}
|
||||
|
||||
|
||||
public BlockData getFind()
|
||||
public FastBlockData getFind()
|
||||
{
|
||||
return findData.aquire(() -> B.getBlockData(when));
|
||||
}
|
||||
|
||||
public BlockData getReplace()
|
||||
public FastBlockData getReplace()
|
||||
{
|
||||
return replaceData.aquire(() ->
|
||||
{
|
||||
BlockData b = B.parseBlockDataOrNull(supplement);
|
||||
FastBlockData b = B.parseBlockDataOrNull(supplement);
|
||||
|
||||
if(b == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Iris.warn("Compat: Using " + supplement + " in place of " + when + " since this server doesnt support '" + supplement + "'");
|
||||
|
||||
return b;
|
||||
|
||||
@@ -12,6 +12,7 @@ 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.FastBlockData;
|
||||
import com.volmit.iris.util.HeightMap;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
@@ -86,7 +87,7 @@ public class IrisDepositGenerator
|
||||
private int varience = 3;
|
||||
|
||||
private final transient AtomicCache<KList<IrisObject>> objects = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<BlockData>> blockData = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<FastBlockData>> blockData = new AtomicCache<>();
|
||||
|
||||
public IrisObject getClump(RNG rng, IrisDataManager rdata)
|
||||
{
|
||||
@@ -136,20 +137,20 @@ public class IrisDepositGenerator
|
||||
return o;
|
||||
}
|
||||
|
||||
private BlockData nextBlock(RNG rngv, IrisDataManager rdata)
|
||||
private FastBlockData nextBlock(RNG rngv, IrisDataManager rdata)
|
||||
{
|
||||
return getBlockData(rdata).get(rngv.i(0, getBlockData(rdata).size() - 1));
|
||||
}
|
||||
|
||||
public KList<BlockData> getBlockData(IrisDataManager rdata)
|
||||
public KList<FastBlockData> getBlockData(IrisDataManager rdata)
|
||||
{
|
||||
return blockData.aquire(() ->
|
||||
{
|
||||
KList<BlockData> blockData = new KList<>();
|
||||
KList<FastBlockData> blockData = new KList<>();
|
||||
|
||||
for(IrisBlockData ix : palette)
|
||||
{
|
||||
BlockData bx = ix.getBlockData(rdata);
|
||||
FastBlockData bx = ix.getBlockData(rdata);
|
||||
|
||||
if(bx != null)
|
||||
{
|
||||
@@ -220,8 +221,8 @@ public class IrisDepositGenerator
|
||||
|
||||
if(!allow)
|
||||
{
|
||||
BlockData b = data.getBlockData(nx, ny, nz);
|
||||
for(BlockData f : g.getDimension().getRockPalette().getBlockData(g.getData()))
|
||||
FastBlockData b = FastBlockData.of(data.getBlockData(nx, ny, nz));
|
||||
for(FastBlockData f : g.getDimension().getRockPalette().getBlockData(g.getData()))
|
||||
{
|
||||
if(f.getMaterial().equals(b.getMaterial()))
|
||||
{
|
||||
@@ -235,7 +236,7 @@ public class IrisDepositGenerator
|
||||
{
|
||||
BlockData b = data.getBlockData(nx, ny, nz);
|
||||
|
||||
if(b.getMaterial().equals(Material.ICE) || b.getMaterial().equals(Material.PACKED_ICE) || b.getMaterial().equals(B.mat("BLUE_ICE")) || b.getMaterial().equals(B.mat("FROSTED_ICE")) || b.getMaterial().equals(Material.SAND) || b.getMaterial().equals(Material.RED_SAND) || !B.isSolid(b.getMaterial()))
|
||||
if(b.getMaterial().equals(Material.ICE) || b.getMaterial().equals(Material.PACKED_ICE) || b.getMaterial().equals(B.mat("BLUE_ICE").getMaterial()) || b.getMaterial().equals(B.mat("FROSTED_ICE").getMaterial()) || b.getMaterial().equals(Material.SAND) || b.getMaterial().equals(Material.RED_SAND) || !B.isSolid(b.getMaterial()))
|
||||
{
|
||||
allow = false;
|
||||
}
|
||||
@@ -243,7 +244,7 @@ public class IrisDepositGenerator
|
||||
|
||||
if(allow)
|
||||
{
|
||||
data.setBlock(nx, ny, nz, clump.getBlocks().get(j));
|
||||
data.setBlock(nx, ny, nz, clump.getBlocks().get(j).getBlockData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.ChunkPosition;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.Form;
|
||||
import com.volmit.iris.util.IrisLock;
|
||||
import com.volmit.iris.util.IrisPostBlockFilter;
|
||||
@@ -54,6 +55,10 @@ public class IrisDimension extends IrisRegistrant
|
||||
@Desc("Create an inverted dimension in the sky (like the nether)")
|
||||
private IrisDimension sky = null;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Improves the biome grid variation by shuffling the cell grid more depending on the seed. This makes biomes across multiple seeds look far different than before.")
|
||||
private boolean aggressiveBiomeReshuffle = false;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Upon joining this world, Iris will send a resource pack request to the client. If they have previously selected yes, it will auto-switch depending on which dimension they go to.")
|
||||
private String resourcePack = "";
|
||||
@@ -498,7 +503,7 @@ public class IrisDimension extends IrisRegistrant
|
||||
});
|
||||
}
|
||||
|
||||
public BlockData resolveBlock(String bd)
|
||||
public FastBlockData resolveBlock(String bd)
|
||||
{
|
||||
return Iris.compat.getBlock(bd);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
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;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
@@ -40,11 +39,11 @@ public class IrisMaterialPalette
|
||||
@Desc("The palette of blocks to be used in this layer")
|
||||
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<FastBlockData>> blockData = new AtomicCache<>();
|
||||
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, IrisDataManager rdata)
|
||||
public FastBlockData get(RNG rng, double x, double y, double z, IrisDataManager rdata)
|
||||
{
|
||||
if(getBlockData(rdata).isEmpty())
|
||||
{
|
||||
@@ -88,14 +87,14 @@ public class IrisMaterialPalette
|
||||
return this;
|
||||
}
|
||||
|
||||
public KList<BlockData> getBlockData(IrisDataManager rdata)
|
||||
public KList<FastBlockData> getBlockData(IrisDataManager rdata)
|
||||
{
|
||||
return blockData.aquire(() ->
|
||||
{
|
||||
KList<BlockData> blockData = new KList<>();
|
||||
KList<FastBlockData> blockData = new KList<>();
|
||||
for(IrisBlockData ix : palette)
|
||||
{
|
||||
BlockData bx = ix.getBlockData(rdata);
|
||||
FastBlockData bx = ix.getBlockData(rdata);
|
||||
if(bx != null)
|
||||
{
|
||||
for(int i = 0; i < ix.getWeight(); i++)
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.util.function.Consumer;
|
||||
|
||||
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;
|
||||
@@ -23,6 +22,7 @@ import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.BlockPosition;
|
||||
import com.volmit.iris.util.CarveResult;
|
||||
import com.volmit.iris.util.ChunkPosition;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.IObjectPlacer;
|
||||
import com.volmit.iris.util.IrisLock;
|
||||
import com.volmit.iris.util.KMap;
|
||||
@@ -30,7 +30,6 @@ import com.volmit.iris.util.RNG;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Accessors(chain = true)
|
||||
@@ -38,12 +37,12 @@ import lombok.experimental.Accessors;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class IrisObject extends IrisRegistrant
|
||||
{
|
||||
private static final BlockData AIR = B.getBlockData("CAVE_AIR");
|
||||
private static final BlockData VAIR = B.getBlockData("VOID_AIR");
|
||||
private static final BlockData VAIR_DEBUG = B.getBlockData("COBWEB");
|
||||
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 FastBlockData AIR = B.getBlockData("CAVE_AIR");
|
||||
private static final FastBlockData VAIR = B.getBlockData("VOID_AIR");
|
||||
private static final FastBlockData VAIR_DEBUG = B.getBlockData("COBWEB");
|
||||
private static final FastBlockData[] SNOW_LAYERS = new FastBlockData[] {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]")};
|
||||
public static boolean shitty = false;
|
||||
private KMap<BlockVector, BlockData> blocks;
|
||||
private KMap<BlockVector, FastBlockData> blocks;
|
||||
private int w;
|
||||
private int d;
|
||||
private int h;
|
||||
@@ -278,7 +277,7 @@ public class IrisObject extends IrisRegistrant
|
||||
dos.writeShort(i.getBlockX());
|
||||
dos.writeShort(i.getBlockY());
|
||||
dos.writeShort(i.getBlockZ());
|
||||
dos.writeUTF(blocks.get(i).getAsString(true));
|
||||
dos.writeUTF(blocks.get(i).getBlockData().getAsString(true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,7 +287,7 @@ public class IrisObject extends IrisRegistrant
|
||||
{
|
||||
return;
|
||||
}
|
||||
KMap<BlockVector, BlockData> d = blocks.copy();
|
||||
KMap<BlockVector, FastBlockData> d = blocks.copy();
|
||||
blocks.clear();
|
||||
|
||||
for(BlockVector i : d.k())
|
||||
@@ -297,7 +296,7 @@ public class IrisObject extends IrisRegistrant
|
||||
}
|
||||
}
|
||||
|
||||
public void setUnsigned(int x, int y, int z, BlockData block)
|
||||
public void setUnsigned(int x, int y, int z, FastBlockData block)
|
||||
{
|
||||
if(shitty)
|
||||
{
|
||||
@@ -327,7 +326,7 @@ public class IrisObject extends IrisRegistrant
|
||||
{
|
||||
return;
|
||||
}
|
||||
place(x, -1, z, placer, config, rng,rdata);
|
||||
place(x, -1, z, placer, config, rng, rdata);
|
||||
}
|
||||
|
||||
public void place(int x, int z, IObjectPlacer placer, IrisObjectPlacement config, RNG rng, CarveResult c, IrisDataManager rdata)
|
||||
@@ -336,12 +335,12 @@ public class IrisObject extends IrisRegistrant
|
||||
{
|
||||
return;
|
||||
}
|
||||
place(x, -1, z, placer, config, rng, null, c,rdata);
|
||||
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, IrisDataManager rdata)
|
||||
{
|
||||
return place(x, yv, z, placer, config, rng, null, null,rdata);
|
||||
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, IrisDataManager rdata)
|
||||
@@ -509,25 +508,25 @@ public class IrisObject extends IrisRegistrant
|
||||
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();
|
||||
FastBlockData data = blocks.get(g).clone();
|
||||
|
||||
if(stilting && i.getBlockY() < lowest && !B.isAir(data))
|
||||
{
|
||||
lowest = i.getBlockY();
|
||||
}
|
||||
|
||||
if(placer.isPreventingDecay() && data instanceof Leaves && !((Leaves) data).isPersistent())
|
||||
if(placer.isPreventingDecay() && (data.getBlockData()) instanceof Leaves && !((Leaves) (data.getBlockData())).isPersistent())
|
||||
{
|
||||
((Leaves) data).setPersistent(true);
|
||||
((Leaves) data.getBlockData()).setPersistent(true);
|
||||
}
|
||||
|
||||
for(IrisObjectReplace j : config.getEdit())
|
||||
{
|
||||
for(BlockData k : j.getFind(rdata))
|
||||
for(FastBlockData 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,rdata).clone();
|
||||
data = j.getReplace(rng, i.getX() + x, i.getY() + y, i.getZ() + z, rdata).clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -597,7 +596,7 @@ public class IrisObject extends IrisRegistrant
|
||||
continue;
|
||||
}
|
||||
|
||||
BlockData d = blocks.get(i);
|
||||
FastBlockData d = blocks.get(i);
|
||||
|
||||
if(d == null || B.isAir(d))
|
||||
{
|
||||
@@ -655,7 +654,7 @@ public class IrisObject extends IrisRegistrant
|
||||
return;
|
||||
}
|
||||
|
||||
KMap<BlockVector, BlockData> v = blocks.copy();
|
||||
KMap<BlockVector, FastBlockData> v = blocks.copy();
|
||||
blocks.clear();
|
||||
|
||||
for(BlockVector i : v.keySet())
|
||||
@@ -673,7 +672,7 @@ public class IrisObject extends IrisRegistrant
|
||||
|
||||
for(BlockVector i : blocks.keySet())
|
||||
{
|
||||
at.clone().add(0, getCenter().getY(), 0).add(i).getBlock().setBlockData(blocks.get(i), false);
|
||||
at.clone().add(0, getCenter().getY(), 0).add(i).getBlock().setBlockData(blocks.get(i).getBlockData(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
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;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
@@ -40,18 +39,18 @@ public class IrisObjectReplace
|
||||
private boolean exact = false;
|
||||
|
||||
private final transient AtomicCache<CNG> replaceGen = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<BlockData>> findData = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<BlockData>> replaceData = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<FastBlockData>> findData = new AtomicCache<>();
|
||||
private final transient AtomicCache<KList<FastBlockData>> replaceData = new AtomicCache<>();
|
||||
|
||||
public KList<BlockData> getFind(IrisDataManager rdata)
|
||||
public KList<FastBlockData> getFind(IrisDataManager rdata)
|
||||
{
|
||||
return findData.aquire(() ->
|
||||
{
|
||||
KList<BlockData> b = new KList<>();
|
||||
KList<FastBlockData> b = new KList<>();
|
||||
|
||||
for(IrisBlockData i : find)
|
||||
{
|
||||
BlockData bx = i.getBlockData(rdata);
|
||||
FastBlockData bx = i.getBlockData(rdata);
|
||||
|
||||
if(bx != null)
|
||||
{
|
||||
@@ -63,7 +62,7 @@ public class IrisObjectReplace
|
||||
});
|
||||
}
|
||||
|
||||
public BlockData getReplace(RNG seed, double x, double y, double z, IrisDataManager rdata)
|
||||
public FastBlockData getReplace(RNG seed, double x, double y, double z, IrisDataManager rdata)
|
||||
{
|
||||
return getReplace().get(seed, x, y, z, rdata);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.bukkit.util.BlockVector;
|
||||
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.FastBlockData;
|
||||
import com.volmit.iris.util.KList;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -111,15 +112,16 @@ public class IrisObjectRotation
|
||||
return BlockFace.SOUTH;
|
||||
}
|
||||
|
||||
public BlockData rotate(BlockData d, int spinxx, int spinyy, int spinzz)
|
||||
public FastBlockData rotate(FastBlockData dd, int spinxx, int spinyy, int spinzz)
|
||||
{
|
||||
BlockData d = dd.getBlockData();
|
||||
int spinx = (int) (90D * (Math.ceil(Math.abs((spinxx % 360D) / 90D))));
|
||||
int spiny = (int) (90D * (Math.ceil(Math.abs((spinyy % 360D) / 90D))));
|
||||
int spinz = (int) (90D * (Math.ceil(Math.abs((spinzz % 360D) / 90D))));
|
||||
|
||||
if(!canRotate())
|
||||
{
|
||||
return d;
|
||||
return FastBlockData.of(d);
|
||||
}
|
||||
|
||||
if(d instanceof Directional)
|
||||
@@ -179,7 +181,7 @@ public class IrisObjectRotation
|
||||
}
|
||||
}
|
||||
|
||||
return d;
|
||||
return FastBlockData.of(d);
|
||||
}
|
||||
|
||||
public BlockVector rotate(BlockVector b, int spinx, int spiny, int spinz)
|
||||
|
||||
Reference in New Issue
Block a user