9
0
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:
Daniel Mills
2020-10-17 02:03:41 -04:00
parent 93529cda60
commit ea46c78a15
39 changed files with 524 additions and 366 deletions

View File

@@ -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())
{

View File

@@ -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);

View File

@@ -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++)

View File

@@ -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)
{

View File

@@ -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()))
{

View File

@@ -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)
{

View File

@@ -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();
}
});
}

View File

@@ -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;

View File

@@ -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());
}
}
}

View File

@@ -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);
}

View File

@@ -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++)

View File

@@ -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);
}
}
}

View File

@@ -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);
}

View File

@@ -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)