9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-29 12:09:07 +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

@@ -1,54 +1,128 @@
package com.volmit.iris.util;
import java.util.concurrent.TimeUnit;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Leaves;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisDimension;
public class B
{
private static final BlockData AIR = Material.AIR.createBlockData();
private static final KMap<String, BlockData> bdc = new KMap<>();
private static final FastBlockData AIR = FastBlockData.of(Material.AIR);
private static final LoadingCache<String, FastBlockData> bdc = Caffeine.newBuilder().expireAfterAccess(60000, TimeUnit.MILLISECONDS).build((c) -> null);
private static final KList<String> nulls = new KList<>();
private static final KList<Material> storage = new KList<>();
private static final KList<Material> storageChest = new KList<>();
private static final KList<Material> lit = new KList<>();
private static final KList<Material> updatable = new KList<>();
private static final KList<Material> notUpdatable = new KList<>();
private static final KList<FastBlockData> storage = new KList<>();
private static final KList<FastBlockData> storageChest = new KList<>();
private static final KList<FastBlockData> lit = new KList<>();
private static final KList<FastBlockData> updatable = new KList<>();
private static final KList<FastBlockData> notUpdatable = new KList<>();
private static final KList<String> canPlaceOn = new KList<>();
private static final KList<Material> decorant = new KList<>();
private static final KList<FastBlockData> decorant = new KList<>();
private static final IrisDimension defaultCompat = new IrisDimension();
private static final KMap<Material, Boolean> solid = new KMap<>();
private static final KMap<String, Material> types = new KMap<>();
private static final KMap<String, Material> typesb = new KMap<>();
private static final LoadingCache<String, FastBlockData> types = Caffeine.newBuilder().expireAfterAccess(30000, TimeUnit.MILLISECONDS).build((c) -> null);
private static final LoadingCache<String, FastBlockData> typesb = Caffeine.newBuilder().expireAfterAccess(30000, TimeUnit.MILLISECONDS).build((c) -> null);
private static IrisLock lock = new IrisLock("Typelock");
public static BlockData get(String bd)
public static FastBlockData get(String bd)
{
return getBlockData(bd);
}
public static boolean isWater(BlockData b)
public static boolean isWater(FastBlockData b)
{
return b.getMaterial().equals(Material.WATER);
}
public static FastBlockData getAir()
{
return AIR;
}
public static LoadingCache<String, FastBlockData> getBdc()
{
return bdc;
}
public static KList<String> getNulls()
{
return nulls;
}
public static KList<FastBlockData> getStorage()
{
return storage;
}
public static KList<FastBlockData> getStoragechest()
{
return storageChest;
}
public static KList<FastBlockData> getLit()
{
return lit;
}
public static KList<FastBlockData> getUpdatable()
{
return updatable;
}
public static KList<FastBlockData> getNotupdatable()
{
return notUpdatable;
}
public static KList<String> getCanplaceon()
{
return canPlaceOn;
}
public static KList<FastBlockData> getDecorant()
{
return decorant;
}
public static IrisDimension getDefaultcompat()
{
return defaultCompat;
}
public static KMap<Material, Boolean> getSolid()
{
return solid;
}
public static LoadingCache<String, FastBlockData> getTypes()
{
return types;
}
public static LoadingCache<String, FastBlockData> getTypesb()
{
return typesb;
}
public static IrisLock getLock()
{
return lock;
}
public static Material getMaterial(String bdx)
{
String bd = bdx.trim().toUpperCase();
return typesb.compute(bd, (k, v) ->
{
if(k != null && v != null)
{
return v;
}
return typesb.get(bd, (k) ->
{
try
{
return Material.valueOf(k);
return FastBlockData.of(Material.valueOf(k));
}
catch(Throwable e)
@@ -56,23 +130,19 @@ public class B
}
return defaultCompat.resolveItem(bdx);
});
return FastBlockData.of(defaultCompat.resolveItem(bdx));
}).getType();
}
public static Material getMaterialOrNull(String bdx)
{
String bd = bdx.trim().toUpperCase();
return types.compute(bd, (k, v) ->
{
if(k != null && v != null)
{
return v;
}
return typesb.get(bd, (k) ->
{
try
{
return Material.valueOf(k);
return FastBlockData.of(Material.valueOf(k));
}
catch(Throwable e)
@@ -81,10 +151,10 @@ public class B
}
return null;
});
}).getType();
}
public static boolean isSolid(BlockData mat)
public static boolean isSolid(FastBlockData mat)
{
return isSolid(mat.getMaterial());
}
@@ -99,14 +169,14 @@ public class B
return solid.get(mat);
}
public static Material mat(String bd)
public static FastBlockData mat(String bd)
{
return getBlockData(bd).getMaterial();
return getBlockData(bd);
}
public static BlockData getBlockData(String bd)
public static FastBlockData getBlockData(String bd)
{
return getBlockData(bd, defaultCompat);
return getBlockData(bd, defaultCompat).optimize();
}
public static String[] getBlockTypes()
@@ -149,18 +219,18 @@ public class B
return bt.toArray(new String[bt.size()]);
}
public static BlockData getBlockData(String bdxf, IrisDimension resolver)
public static FastBlockData getBlockData(String bdxf, IrisDimension resolver)
{
try
{
String bd = bdxf.trim();
if(bdc.containsKey(bd))
FastBlockData fff = bdc.get(bd);
if(fff != null)
{
return bdc.get(bd).clone();
return fff.clone();
}
BlockData bdx = parseBlockData(bd);
FastBlockData bdx = parseBlockData(bd);
if(bdx == null)
{
@@ -192,11 +262,11 @@ public class B
return AIR;
}
public static BlockData parseBlockDataOrNull(String ix)
public static FastBlockData parseBlockDataOrNull(String ix)
{
try
{
BlockData bx = Bukkit.createBlockData(ix);
FastBlockData bx = FastBlockData.of(Bukkit.createBlockData(ix));
if(bx != null)
{
@@ -215,9 +285,7 @@ public class B
try
{
Material m = Material.valueOf(i);
return m.createBlockData();
return FastBlockData.of(Material.valueOf(i));
}
catch(Throwable e)
@@ -228,11 +296,11 @@ public class B
return null;
}
public static BlockData parseBlockData(String ix)
public static FastBlockData parseBlockData(String ix)
{
try
{
BlockData bx = Bukkit.createBlockData(ix);
FastBlockData bx = FastBlockData.of(Bukkit.createBlockData(ix));
if(bx != null)
{
@@ -251,9 +319,7 @@ public class B
try
{
Material m = Material.valueOf(i);
return m.createBlockData();
return FastBlockData.of(Material.valueOf(i));
}
catch(Throwable e)
@@ -264,12 +330,7 @@ public class B
return AIR;
}
public static boolean isUpdatable(BlockData mat)
{
return isUpdatable(mat.getMaterial());
}
public static boolean isStorage(Material mat)
public static boolean isStorage(FastBlockData mat)
{
if(storage.contains(mat))
{
@@ -291,7 +352,7 @@ public class B
return false;
}
public static boolean isStorageChest(Material mat)
public static boolean isStorageChest(FastBlockData mat)
{
if(storageChest.contains(mat))
{
@@ -313,7 +374,7 @@ public class B
return false;
}
public static boolean isLit(Material mat)
public static boolean isLit(FastBlockData mat)
{
if(lit.contains(mat))
{
@@ -321,7 +382,7 @@ public class B
}
// @NoArgsConstructor
boolean str = mat.equals(B.mat("GLOWSTONE")) || mat.equals(B.mat("END_ROD")) || mat.equals(B.mat("SOUL_SAND")) || mat.equals(B.mat("TORCH")) || mat.equals(Material.REDSTONE_TORCH) || mat.equals(B.mat("SOUL_TORCH")) || mat.equals(Material.REDSTONE_WALL_TORCH) || mat.equals(Material.WALL_TORCH) || mat.equals(B.mat("SOUL_WALL_TORCH")) || mat.equals(B.mat("LANTERN")) || mat.equals(Material.JACK_O_LANTERN) || mat.equals(Material.REDSTONE_LAMP) || mat.equals(Material.MAGMA_BLOCK) || mat.equals(B.mat("SHROOMLIGHT")) || mat.equals(B.mat("SEA_LANTERN")) || mat.equals(B.mat("SOUL_LANTERN")) || mat.equals(Material.FIRE) || mat.equals(B.mat("SOUL_FIRE")) || mat.equals(B.mat("SEA_PICKLE")) || mat.equals(Material.BREWING_STAND) || mat.equals(Material.REDSTONE_ORE);
boolean str = mat.equals(B.mat("GLOWSTONE")) || mat.equals(B.mat("END_ROD")) || mat.equals(B.mat("SOUL_SAND")) || mat.equals(B.mat("TORCH")) || mat.getType().equals(Material.REDSTONE_TORCH) || mat.equals(B.mat("SOUL_TORCH")) || mat.getType().equals(Material.REDSTONE_WALL_TORCH) || mat.getType().equals(Material.WALL_TORCH) || mat.equals(B.mat("SOUL_WALL_TORCH")) || mat.equals(B.mat("LANTERN")) || mat.getType().equals(Material.JACK_O_LANTERN) || mat.getType().equals(Material.REDSTONE_LAMP) || mat.getType().equals(Material.MAGMA_BLOCK) || mat.equals(B.mat("SHROOMLIGHT")) || mat.equals(B.mat("SEA_LANTERN")) || mat.equals(B.mat("SOUL_LANTERN")) || mat.getType().equals(Material.FIRE) || mat.equals(B.mat("SOUL_FIRE")) || mat.equals(B.mat("SEA_PICKLE")) || mat.getType().equals(Material.BREWING_STAND) || mat.getType().equals(Material.REDSTONE_ORE);
//@done
if(str)
{
@@ -334,7 +395,7 @@ public class B
return false;
}
public static boolean isUpdatable(Material mat)
public static boolean isUpdatable(FastBlockData mat)
{
if(updatable.contains(mat))
{
@@ -362,16 +423,16 @@ public class B
return false;
}
public static boolean isFoliage(BlockData d)
public static boolean isFoliage(FastBlockData d)
{
if(isFluid(d) || isAir(d) || isSolid(d))
{
return false;
}
Material mat = d.getMaterial();
FastBlockData mat = d;
// @NoArgsConstructor
return mat.equals(Material.POPPY) || mat.equals(Material.DANDELION) || mat.equals(B.mat("CORNFLOWER")) || mat.equals(B.mat("SWEET_BERRY_BUSH")) || mat.equals(B.mat("CRIMSON_ROOTS")) || mat.equals(B.mat("WARPED_ROOTS")) || mat.equals(B.mat("NETHER_SPROUTS")) || mat.equals(B.mat("ALLIUM")) || mat.equals(B.mat("AZURE_BLUET")) || mat.equals(B.mat("BLUE_ORCHID")) || mat.equals(B.mat("POPPY")) || mat.equals(B.mat("DANDELION")) || mat.equals(B.mat("OXEYE_DAISY")) || mat.equals(B.mat("LILY_OF_THE_VALLEY")) || mat.equals(B.mat("WITHER_ROSE")) || mat.equals(Material.DARK_OAK_SAPLING) || mat.equals(Material.ACACIA_SAPLING) || mat.equals(Material.JUNGLE_SAPLING) || mat.equals(Material.BIRCH_SAPLING) || mat.equals(Material.SPRUCE_SAPLING) || mat.equals(Material.OAK_SAPLING) || mat.equals(Material.ORANGE_TULIP) || mat.equals(Material.PINK_TULIP) || mat.equals(Material.RED_TULIP) || mat.equals(Material.WHITE_TULIP) || mat.equals(Material.FERN) || mat.equals(Material.LARGE_FERN) || mat.equals(Material.GRASS) || mat.equals(Material.TALL_GRASS);
return mat.getType().equals(Material.POPPY) || mat.getType().equals(Material.DANDELION) || mat.equals(B.mat("CORNFLOWER")) || mat.equals(B.mat("SWEET_BERRY_BUSH")) || mat.equals(B.mat("CRIMSON_ROOTS")) || mat.equals(B.mat("WARPED_ROOTS")) || mat.equals(B.mat("NETHER_SPROUTS")) || mat.equals(B.mat("ALLIUM")) || mat.equals(B.mat("AZURE_BLUET")) || mat.equals(B.mat("BLUE_ORCHID")) || mat.equals(B.mat("POPPY")) || mat.equals(B.mat("DANDELION")) || mat.equals(B.mat("OXEYE_DAISY")) || mat.equals(B.mat("LILY_OF_THE_VALLEY")) || mat.equals(B.mat("WITHER_ROSE")) || mat.getType().equals(Material.DARK_OAK_SAPLING) || mat.getType().equals(Material.ACACIA_SAPLING) || mat.getType().equals(Material.JUNGLE_SAPLING) || mat.getType().equals(Material.BIRCH_SAPLING) || mat.getType().equals(Material.SPRUCE_SAPLING) || mat.getType().equals(Material.OAK_SAPLING) || mat.getType().equals(Material.ORANGE_TULIP) || mat.getType().equals(Material.PINK_TULIP) || mat.getType().equals(Material.RED_TULIP) || mat.getType().equals(Material.WHITE_TULIP) || mat.getType().equals(Material.FERN) || mat.getType().equals(Material.LARGE_FERN) || mat.getType().equals(Material.GRASS) || mat.getType().equals(Material.TALL_GRASS);
//@done
}
@@ -395,7 +456,7 @@ public class B
}
}
if(onto.equals(Material.AIR) || onto.equals(B.mat("CAVE_AIR")))
if(onto.equals(Material.AIR) || onto.equals(B.mat("CAVE_AIR").getMaterial()))
{
lock.lock();
canPlaceOn.add(key);
@@ -436,7 +497,7 @@ public class B
return true;
}
public static boolean isDecorant(Material m)
public static boolean isDecorant(FastBlockData m)
{
if(decorant.contains(m))
{
@@ -444,7 +505,7 @@ public class B
}
// @NoArgsConstructor
boolean str = m.equals(Material.GRASS) || m.equals(Material.TALL_GRASS) || m.equals(B.mat("CORNFLOWER")) || m.equals(Material.SUNFLOWER) || m.equals(Material.CHORUS_FLOWER) || m.equals(Material.POPPY) || m.equals(Material.DANDELION) || m.equals(Material.OXEYE_DAISY) || m.equals(Material.ORANGE_TULIP) || m.equals(Material.PINK_TULIP) || m.equals(Material.RED_TULIP) || m.equals(Material.WHITE_TULIP) || m.equals(Material.LILAC) || m.equals(Material.DEAD_BUSH) || m.equals(B.mat("SWEET_BERRY_BUSH")) || m.equals(Material.ROSE_BUSH) || m.equals(B.mat("WITHER_ROSE")) || m.equals(Material.ALLIUM) || m.equals(Material.BLUE_ORCHID) || m.equals(B.mat("LILY_OF_THE_VALLEY")) || m.equals(B.mat("CRIMSON_FUNGUS")) || m.equals(B.mat("WARPED_FUNGUS")) || m.equals(Material.RED_MUSHROOM) || m.equals(Material.BROWN_MUSHROOM) || m.equals(B.mat("CRIMSON_ROOTS")) || m.equals(B.mat("AZURE_BLUET")) || m.equals(B.mat("WEEPING_VINES")) || m.equals(B.mat("WEEPING_VINES_PLANT")) || m.equals(B.mat("WARPED_ROOTS")) || m.equals(B.mat("NETHER_SPROUTS")) || m.equals(B.mat("TWISTING_VINES")) || m.equals(B.mat("TWISTING_VINES_PLANT")) || m.equals(Material.SUGAR_CANE) || m.equals(Material.WHEAT) || m.equals(Material.POTATOES) || m.equals(Material.CARROTS) || m.equals(Material.BEETROOTS) || m.equals(Material.NETHER_WART) || m.equals(B.mat("SEA_PICKLE")) || m.equals(B.mat("SEAGRASS")) || m.equals(B.mat("ACACIA_BUTTON")) || m.equals(B.mat("BIRCH_BUTTON")) || m.equals(B.mat("CRIMSON_BUTTON")) || m.equals(B.mat("DARK_OAK_BUTTON")) || m.equals(B.mat("JUNGLE_BUTTON")) || m.equals(B.mat("OAK_BUTTON")) || m.equals(B.mat("POLISHED_BLACKSTONE_BUTTON")) || m.equals(B.mat("SPRUCE_BUTTON")) || m.equals(B.mat("STONE_BUTTON")) || m.equals(B.mat("WARPED_BUTTON")) || m.equals(Material.TORCH) || m.equals(B.mat("SOUL_TORCH"));
boolean str = m.getType().equals(Material.GRASS) || m.getType().equals(Material.TALL_GRASS) || m.equals(B.mat("CORNFLOWER")) || m.getType().equals(Material.SUNFLOWER) || m.getType().equals(Material.CHORUS_FLOWER) || m.getType().equals(Material.POPPY) || m.getType().equals(Material.DANDELION) || m.getType().equals(Material.OXEYE_DAISY) || m.getType().equals(Material.ORANGE_TULIP) || m.getType().equals(Material.PINK_TULIP) || m.getType().equals(Material.RED_TULIP) || m.getType().equals(Material.WHITE_TULIP) || m.getType().equals(Material.LILAC) || m.getType().equals(Material.DEAD_BUSH) || m.equals(B.mat("SWEET_BERRY_BUSH")) || m.getType().equals(Material.ROSE_BUSH) || m.equals(B.mat("WITHER_ROSE")) || m.getType().equals(Material.ALLIUM) || m.getType().equals(Material.BLUE_ORCHID) || m.equals(B.mat("LILY_OF_THE_VALLEY")) || m.equals(B.mat("CRIMSON_FUNGUS")) || m.equals(B.mat("WARPED_FUNGUS")) || m.getType().equals(Material.RED_MUSHROOM) || m.getType().equals(Material.BROWN_MUSHROOM) || m.equals(B.mat("CRIMSON_ROOTS")) || m.equals(B.mat("AZURE_BLUET")) || m.equals(B.mat("WEEPING_VINES")) || m.equals(B.mat("WEEPING_VINES_PLANT")) || m.equals(B.mat("WARPED_ROOTS")) || m.equals(B.mat("NETHER_SPROUTS")) || m.equals(B.mat("TWISTING_VINES")) || m.equals(B.mat("TWISTING_VINES_PLANT")) || m.getType().equals(Material.SUGAR_CANE) || m.getType().equals(Material.WHEAT) || m.getType().equals(Material.POTATOES) || m.getType().equals(Material.CARROTS) || m.getType().equals(Material.BEETROOTS) || m.getType().equals(Material.NETHER_WART) || m.equals(B.mat("SEA_PICKLE")) || m.equals(B.mat("SEAGRASS")) || m.equals(B.mat("ACACIA_BUTTON")) || m.equals(B.mat("BIRCH_BUTTON")) || m.equals(B.mat("CRIMSON_BUTTON")) || m.equals(B.mat("DARK_OAK_BUTTON")) || m.equals(B.mat("JUNGLE_BUTTON")) || m.equals(B.mat("OAK_BUTTON")) || m.equals(B.mat("POLISHED_BLACKSTONE_BUTTON")) || m.equals(B.mat("SPRUCE_BUTTON")) || m.equals(B.mat("STONE_BUTTON")) || m.equals(B.mat("WARPED_BUTTON")) || m.getType().equals(Material.TORCH) || m.equals(B.mat("SOUL_TORCH"));
//@done
if(str)
@@ -456,13 +517,13 @@ public class B
return false;
}
public static KList<BlockData> getBlockData(KList<String> find)
public static KList<FastBlockData> getBlockData(KList<String> find)
{
KList<BlockData> b = new KList<>();
KList<FastBlockData> b = new KList<>();
for(String i : find)
{
BlockData bd = getBlockData(i);
FastBlockData bd = getBlockData(i);
if(bd != null)
{
@@ -473,22 +534,22 @@ public class B
return b;
}
public static boolean isFoliagePlantable(BlockData d)
public static boolean isFoliagePlantable(FastBlockData d)
{
return d.getMaterial().equals(Material.GRASS_BLOCK) || d.getMaterial().equals(Material.DIRT) || d.getMaterial().equals(Material.COARSE_DIRT) || d.getMaterial().equals(Material.PODZOL);
}
public static boolean isFluid(BlockData d)
public static boolean isFluid(FastBlockData d)
{
return d.getMaterial().equals(Material.WATER) || d.getMaterial().equals(Material.LAVA);
}
public static boolean isAirOrFluid(BlockData d)
public static boolean isAirOrFluid(FastBlockData d)
{
return isAir(d) || isFluid(d);
}
public static boolean isAir(BlockData d)
public static boolean isAir(FastBlockData d)
{
if(d == null)
{

View File

@@ -13,6 +13,7 @@ public class FastBlockData
{
this.blockData = d;
this.type = null;
optimize();
}
private FastBlockData(Material m)
@@ -21,6 +22,11 @@ public class FastBlockData
this.blockData = null;
}
public Material getMaterial()
{
return type != null ? type : blockData.getMaterial();
}
public static FastBlockData of(Material type)
{
return new FastBlockData(type);
@@ -40,7 +46,7 @@ public class FastBlockData
{
if(hasBlockData())
{
BlockData f = getDefaultBlockData(type);
BlockData f = getDefaultBlockData(getMaterial());
if(f.hashCode() == getBlockData().hashCode())
{
@@ -63,7 +69,7 @@ public class FastBlockData
return blockData != null;
}
public BlockData getBlockData()
public BlockData createBlockData()
{
if(blockData != null)
{
@@ -72,4 +78,60 @@ public class FastBlockData
return type.createBlockData();
}
public BlockData getBlockData()
{
if(blockData == null)
{
blockData = createBlockData();
}
return blockData;
}
@Override
public int hashCode()
{
if(hasBlockData())
{
return getBlockData().hashCode();
}
return getType().hashCode();
}
@Override
public boolean equals(Object obj)
{
if(this == obj)
{
return true;
}
if(obj == null)
{
return false;
}
if(getClass() != obj.getClass())
{
return false;
}
FastBlockData other = (FastBlockData) obj;
if(other.hashCode() == hashCode())
{
return true;
}
return false;
}
public FastBlockData clone()
{
return hasBlockData() ? new FastBlockData(blockData.clone()) : new FastBlockData(getType());
}
public boolean matches(FastBlockData data)
{
return (data.hasBlockData() && hasBlockData() && getBlockData().matches(data.getBlockData())) || (!data.hasBlockData() && !hasBlockData() && getType().equals(data.getType()));
}
}

View File

@@ -1,16 +1,14 @@
package com.volmit.iris.util;
import org.bukkit.block.data.BlockData;
public interface IObjectPlacer
{
public int getHighest(int x, int z);
public int getHighest(int x, int z, boolean ignoreFluid);
public void set(int x, int y, int z, BlockData d);
public void set(int x, int y, int z, FastBlockData d);
public BlockData get(int x, int y, int z);
public FastBlockData get(int x, int y, int z);
public boolean isPreventingDecay();

View File

@@ -1,13 +1,12 @@
package com.volmit.iris.util;
import org.bukkit.block.data.BlockData;
import org.bukkit.generator.ChunkGenerator.ChunkData;
public interface IPostBlockAccess
{
public BlockData getPostBlock(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData);
public FastBlockData getPostBlock(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData);
public void setPostBlock(int x, int y, int z, BlockData d, int currentPostX, int currentPostZ, ChunkData currentData);
public void setPostBlock(int x, int y, int z, FastBlockData d, int currentPostX, int currentPostZ, ChunkData currentData);
public int highestTerrainOrFluidBlock(int x, int z);

View File

@@ -1,7 +1,6 @@
package com.volmit.iris.util;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Levelled;
import org.bukkit.block.data.Waterlogged;
import org.bukkit.block.data.type.Slab;
@@ -33,13 +32,13 @@ public abstract class IrisPostBlockFilter implements IPostBlockAccess
public abstract void onPost(int x, int z, int currentPostX, int currentPostZ, ChunkData currentData, KList<Runnable> q);
@Override
public BlockData getPostBlock(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
public FastBlockData getPostBlock(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
return gen.getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
}
@Override
public void setPostBlock(int x, int y, int z, BlockData d, int currentPostX, int currentPostZ, ChunkData currentData)
public void setPostBlock(int x, int y, int z, FastBlockData d, int currentPostX, int currentPostZ, ChunkData currentData)
{
gen.setPostBlock(x, y, z, d, currentPostX, currentPostZ, currentData);
}
@@ -63,62 +62,62 @@ public abstract class IrisPostBlockFilter implements IPostBlockAccess
public boolean isAir(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR);
}
public boolean hasGravity(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.SAND) || d.getMaterial().equals(Material.RED_SAND) || d.getMaterial().equals(Material.BLACK_CONCRETE_POWDER) || d.getMaterial().equals(Material.BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.BROWN_CONCRETE_POWDER) || d.getMaterial().equals(Material.CYAN_CONCRETE_POWDER) || d.getMaterial().equals(Material.GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.GREEN_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_BLUE_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIGHT_GRAY_CONCRETE_POWDER) || d.getMaterial().equals(Material.LIME_CONCRETE_POWDER) || d.getMaterial().equals(Material.MAGENTA_CONCRETE_POWDER) || d.getMaterial().equals(Material.ORANGE_CONCRETE_POWDER) || d.getMaterial().equals(Material.PINK_CONCRETE_POWDER) || d.getMaterial().equals(Material.PURPLE_CONCRETE_POWDER) || d.getMaterial().equals(Material.RED_CONCRETE_POWDER) || d.getMaterial().equals(Material.WHITE_CONCRETE_POWDER) || d.getMaterial().equals(Material.YELLOW_CONCRETE_POWDER);
}
public boolean isSolid(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().isSolid();
}
public boolean isSolidNonSlab(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().isSolid() && !(d instanceof Slab);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().isSolid() && !(d.getBlockData() instanceof Slab);
}
public boolean isAirOrWater(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.WATER) || d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR);
}
public boolean isSlab(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d instanceof Slab;
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getBlockData() instanceof Slab;
}
public boolean isSnowLayer(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.SNOW);
}
public boolean isWater(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.WATER);
}
public boolean isWaterOrWaterlogged(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.WATER) || (d instanceof Waterlogged && ((Waterlogged) d).isWaterlogged());
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getMaterial().equals(Material.WATER) || (d.getBlockData() instanceof Waterlogged && ((Waterlogged) d.getBlockData()).isWaterlogged());
}
public boolean isLiquid(int x, int y, int z, int currentPostX, int currentPostZ, ChunkData currentData)
{
BlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d instanceof Levelled;
FastBlockData d = getPostBlock(x, y, z, currentPostX, currentPostZ, currentData);
return d.getBlockData() instanceof Levelled;
}
@Override

View File

@@ -20,7 +20,7 @@ public class ParallaxSection implements Writable
public ParallaxSection()
{
updates = new KSet<Short>();
this.block = new DataPalette<BlockData>(B.get("AIR"))
this.block = new DataPalette<BlockData>(B.get("AIR").getBlockData())
{
@Override
public void writeType(BlockData t, DataOutputStream o) throws IOException
@@ -31,7 +31,7 @@ public class ParallaxSection implements Writable
@Override
public BlockData readType(DataInputStream i) throws IOException
{
return B.get(i.readUTF());
return B.get(i.readUTF()).getBlockData();
}
};
}
@@ -55,7 +55,7 @@ public class ParallaxSection implements Writable
{
block.set(x, y, z, d);
if(B.isUpdatable(d))
if(B.isUpdatable(FastBlockData.of(d)))
{
update(x, y, z);
}