Revert "Revert "Block Compat""

This reverts commit 05ab44d50b9048ddf69e27afc803dad56ab06526.
This commit is contained in:
Daniel Mills 2020-08-06 15:58:21 -04:00
parent 05ab44d50b
commit 4207330dcf
24 changed files with 212 additions and 1573 deletions

View File

@ -23,7 +23,7 @@ import org.bukkit.generator.ChunkGenerator;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.IrisContext; import com.volmit.iris.IrisContext;
import com.volmit.iris.IrisMetrics; import com.volmit.iris.IrisMetrics;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.ChronoLatch; import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.J; import com.volmit.iris.util.J;
@ -220,12 +220,12 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
if(j == i || j + i == 16) if(j == i || j + i == 16)
{ {
c.setBlock(i, h, j, BlockDataTools.getBlockData("RED_TERRACOTTA")); c.setBlock(i, h, j, B.getBlockData("RED_TERRACOTTA"));
} }
else else
{ {
c.setBlock(i, h, j, BlockDataTools.getBlockData("BLACK_TERRACOTTA")); c.setBlock(i, h, j, B.getBlockData("BLACK_TERRACOTTA"));
} }
} }
} }
@ -245,12 +245,12 @@ public abstract class ContextualChunkGenerator extends ChunkGenerator implements
if(j == i || j + i == 16) if(j == i || j + i == 16)
{ {
c.setBlock(i, h, j, BlockDataTools.getBlockData("BLUE_TERRACOTTA")); c.setBlock(i, h, j, B.getBlockData("BLUE_TERRACOTTA"));
} }
else else
{ {
c.setBlock(i, h, j, BlockDataTools.getBlockData("WHITE_TERRACOTTA")); c.setBlock(i, h, j, B.getBlockData("WHITE_TERRACOTTA"));
} }
} }
} }

View File

@ -8,6 +8,7 @@ import com.volmit.iris.object.InferredType;
import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisRegion; import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.util.B;
import com.volmit.iris.util.BiomeResult; import com.volmit.iris.util.BiomeResult;
import lombok.Data; import lombok.Data;
@ -19,7 +20,7 @@ public abstract class DimensionChunkGenerator extends ContextualChunkGenerator
{ {
protected final String dimensionName; protected final String dimensionName;
protected static final BlockData AIR = Material.AIR.createBlockData(); protected static final BlockData AIR = Material.AIR.createBlockData();
protected static final BlockData CAVE_AIR = Material.CAVE_AIR.createBlockData(); protected static final BlockData CAVE_AIR = B.get("CAVE_AIR");
protected static final BlockData BEDROCK = Material.BEDROCK.createBlockData(); protected static final BlockData BEDROCK = Material.BEDROCK.createBlockData();
public DimensionChunkGenerator(String dimensionName) public DimensionChunkGenerator(String dimensionName)

View File

@ -18,7 +18,7 @@ import com.volmit.iris.object.IrisDepositGenerator;
import com.volmit.iris.object.IrisRegion; import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.util.BiomeMap; import com.volmit.iris.util.BiomeMap;
import com.volmit.iris.util.BiomeResult; import com.volmit.iris.util.BiomeResult;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.CaveResult; import com.volmit.iris.util.CaveResult;
import com.volmit.iris.util.HeightMap; import com.volmit.iris.util.HeightMap;
import com.volmit.iris.util.IrisLock; import com.volmit.iris.util.IrisLock;
@ -323,7 +323,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
if(d != null) if(d != null)
{ {
if(!BlockDataTools.canPlaceOnto(d.getMaterial(), block.getMaterial())) if(!B.canPlaceOnto(d.getMaterial(), block.getMaterial()))
{ {
continue; continue;
} }
@ -332,7 +332,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
{ {
if(!block.getMaterial().equals(Material.SAND) && !block.getMaterial().equals(Material.RED_SAND)) if(!block.getMaterial().equals(Material.SAND) && !block.getMaterial().equals(Material.RED_SAND))
{ {
sliver.set(k, BlockDataTools.getBlockData("RED_SAND")); sliver.set(k, B.getBlockData("RED_SAND"));
} }
} }
@ -340,7 +340,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
{ {
if(!block.getMaterial().equals(Material.FARMLAND)) if(!block.getMaterial().equals(Material.FARMLAND))
{ {
sliver.set(k, BlockDataTools.getBlockData("FARMLAND")); sliver.set(k, B.getBlockData("FARMLAND"));
} }
} }
@ -392,7 +392,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
if(d != null) if(d != null)
{ {
if(!BlockDataTools.canPlaceOnto(d.getMaterial(), block.getMaterial())) if(!B.canPlaceOnto(d.getMaterial(), block.getMaterial()))
{ {
continue; continue;
} }
@ -401,7 +401,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
{ {
if(!block.getMaterial().equals(Material.SAND) && !block.getMaterial().equals(Material.RED_SAND)) if(!block.getMaterial().equals(Material.SAND) && !block.getMaterial().equals(Material.RED_SAND))
{ {
sliver.set(k, BlockDataTools.getBlockData("SAND")); sliver.set(k, B.getBlockData("SAND"));
} }
} }

View File

@ -9,13 +9,15 @@ public class AtomicCache<T>
{ {
private transient volatile T t; private transient volatile T t;
private transient volatile long a; private transient volatile long a;
private boolean nullSupport;
private transient volatile int validations; private transient volatile int validations;
private final IrisLock check; private final IrisLock check;
private final IrisLock time; private final IrisLock time;
private final IrisLock write; private final IrisLock write;
public AtomicCache() public AtomicCache(boolean nullSupport)
{ {
this.nullSupport = nullSupport;
check = new IrisLock("Check"); check = new IrisLock("Check");
write = new IrisLock("Write"); write = new IrisLock("Write");
time = new IrisLock("Time"); time = new IrisLock("Time");
@ -24,6 +26,11 @@ public class AtomicCache<T>
t = null; t = null;
} }
public AtomicCache()
{
this(false);
}
public void reset() public void reset()
{ {
check.lock(); check.lock();
@ -36,8 +43,43 @@ public class AtomicCache<T>
check.unlock(); check.unlock();
} }
public T aquireNullex(Supplier<T> t)
{
if(validations > 1000)
{
return this.t;
}
if(M.ms() - a > 1000)
{
validations++;
return this.t;
}
check.lock();
write.lock();
this.t = t.get();
time.lock();
if(a == -1)
{
a = M.ms();
}
time.unlock();
write.unlock();
check.unlock();
return this.t;
}
public T aquire(Supplier<T> t) public T aquire(Supplier<T> t)
{ {
if(nullSupport)
{
return aquireNullex(t);
}
if(this.t != null && validations > 1000) if(this.t != null && validations > 1000)
{ {
return this.t; return this.t;
@ -55,7 +97,7 @@ public class AtomicCache<T>
check.lock(); check.lock();
if(this.t == null) if(this.t != null)
{ {
write.lock(); write.lock();
this.t = t.get(); this.t = t.get();

View File

@ -11,7 +11,7 @@ import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import org.bukkit.generator.ChunkGenerator.ChunkData; import org.bukkit.generator.ChunkGenerator.ChunkData;
import com.volmit.iris.object.IrisBiome; import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.HeightMap; import com.volmit.iris.util.HeightMap;
import com.volmit.iris.util.IrisLock; import com.volmit.iris.util.IrisLock;
import com.volmit.iris.util.KList; import com.volmit.iris.util.KList;
@ -23,7 +23,7 @@ import lombok.Data;
@Data @Data
public class AtomicSliver public class AtomicSliver
{ {
public static final BlockData AIR = BlockDataTools.getBlockData("AIR"); public static final BlockData AIR = B.getBlockData("AIR");
private KMap<Integer, BlockData> block; private KMap<Integer, BlockData> block;
private KMap<Integer, IrisBiome> truebiome; private KMap<Integer, IrisBiome> truebiome;
private KMap<Integer, Biome> biome; private KMap<Integer, Biome> biome;
@ -75,7 +75,7 @@ public class AtomicSliver
lock.unlock(); lock.unlock();
modified = true; modified = true;
if(d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(Material.CAVE_AIR)) if(d.getMaterial().equals(Material.AIR) || d.getMaterial().equals(B.mat("CAVE_AIR")))
{ {
return; return;
} }
@ -181,7 +181,7 @@ public class AtomicSliver
for(int i = 0; i < p; i++) for(int i = 0; i < p; i++)
{ {
palette.add(BlockDataTools.getBlockData(din.readUTF())); palette.add(B.getBlockData(din.readUTF()));
} }
for(int i = 0; i <= h; i++) for(int i = 0; i <= h; i++)

View File

@ -5,7 +5,7 @@ import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.DimensionChunkGenerator; import com.volmit.iris.gen.DimensionChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicSliver; import com.volmit.iris.gen.atomics.AtomicSliver;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.CaveResult; import com.volmit.iris.util.CaveResult;
import com.volmit.iris.util.FastNoise; import com.volmit.iris.util.FastNoise;
@ -18,8 +18,8 @@ import com.volmit.iris.util.FastNoise.NoiseType;
public class GenLayerCave extends GenLayer public class GenLayerCave extends GenLayer
{ {
public static final BlockData CAVE_AIR = BlockDataTools.getBlockData("CAVE_AIR"); public static final BlockData CAVE_AIR = B.getBlockData("CAVE_AIR");
public static final BlockData AIR = BlockDataTools.getBlockData("AIR"); public static final BlockData AIR = B.getBlockData("AIR");
private static final KList<CaveResult> EMPTY = new KList<>(); private static final KList<CaveResult> EMPTY = new KList<>();
private CNG gincline; private CNG gincline;
private CNG shuffle; private CNG shuffle;
@ -174,7 +174,7 @@ public class GenLayerCave extends GenLayer
public boolean canAir(Material m) public boolean canAir(Material m)
{ {
return (m.isSolid() || (BlockDataTools.isDecorant(m)) || m.equals(Material.AIR) || m.equals(Material.CAVE_AIR)) && !m.equals(Material.BEDROCK); return (m.isSolid() || (B.isDecorant(m)) || m.equals(Material.AIR) || m.equals(B.mat("CAVE_AIR"))) && !m.equals(Material.BEDROCK);
} }
public boolean canWater(Material m) public boolean canWater(Material m)

View File

@ -3,13 +3,13 @@ package com.volmit.iris.gen.post;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.PostBlockChunkGenerator; import com.volmit.iris.gen.PostBlockChunkGenerator;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.IrisPostBlockFilter; import com.volmit.iris.util.IrisPostBlockFilter;
@Post("floating-block-remover") @Post("floating-block-remover")
public class PostFloatingNibDeleter extends IrisPostBlockFilter public class PostFloatingNibDeleter extends IrisPostBlockFilter
{ {
private static final BlockData AIR = BlockDataTools.getBlockData("AIR"); private static final BlockData AIR = B.getBlockData("AIR");
public PostFloatingNibDeleter(PostBlockChunkGenerator gen, int phase) public PostFloatingNibDeleter(PostBlockChunkGenerator gen, int phase)
{ {

View File

@ -5,13 +5,13 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Waterlogged; import org.bukkit.block.data.Waterlogged;
import com.volmit.iris.gen.PostBlockChunkGenerator; import com.volmit.iris.gen.PostBlockChunkGenerator;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.IrisPostBlockFilter; import com.volmit.iris.util.IrisPostBlockFilter;
@Post("waterlogger") @Post("waterlogger")
public class PostWaterlogger extends IrisPostBlockFilter public class PostWaterlogger extends IrisPostBlockFilter
{ {
private static final BlockData WATER = BlockDataTools.getBlockData("WATER"); private static final BlockData WATER = B.getBlockData("WATER");
public PostWaterlogger(PostBlockChunkGenerator gen, int phase) public PostWaterlogger(PostBlockChunkGenerator gen, int phase)
{ {

View File

@ -1,40 +0,0 @@
package com.volmit.iris.gen.standalone;
import org.bukkit.block.Biome;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import com.volmit.iris.util.BiomeStorage;
public class StandaloneBiomeGrid implements BiomeGrid
{
private final BiomeStorage storage;
public StandaloneBiomeGrid()
{
storage = new BiomeStorage();
}
@Override
public Biome getBiome(int x, int z)
{
throw new UnsupportedOperationException("Use GetBiome x, y, z");
}
@Override
public Biome getBiome(int x, int y, int z)
{
return storage.getBiome(x, y, z);
}
@Override
public void setBiome(int arg0, int arg1, Biome arg2)
{
throw new UnsupportedOperationException("Use SetBiome x, y, z, b");
}
@Override
public void setBiome(int x, int y, int z, Biome b)
{
storage.setBiome(x, y, z, b);
}
}

View File

@ -1,81 +0,0 @@
package com.volmit.iris.gen.standalone;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.generator.ChunkGenerator.ChunkData;
import org.bukkit.material.MaterialData;
import com.volmit.iris.gen.atomics.AtomicSliverMap;
@SuppressWarnings("deprecation")
public class StandaloneChunkData extends AtomicSliverMap implements ChunkData
{
@Override
public BlockData getBlockData(int x, int y, int z)
{
return getSliver(x, z).get(y);
}
@Override
public byte getData(int x, int y, int z)
{
throw new UnsupportedOperationException("Use getBlockData");
}
@Override
public int getMaxHeight()
{
return 256;
}
@Override
public Material getType(int x, int y, int z)
{
return getBlockData(x, y, z).getMaterial();
}
@Deprecated
@Override
public MaterialData getTypeAndData(int x, int y, int z)
{
throw new UnsupportedOperationException("Use GetBlockData");
}
@Override
public void setBlock(int x, int y, int z, Material arg3)
{
setBlock(x, y, z, arg3.createBlockData());
}
@Deprecated
@Override
public void setBlock(int arg0, int arg1, int arg2, MaterialData arg3)
{
throw new UnsupportedOperationException("Use SetBlock (bd)");
}
@Override
public void setBlock(int x, int y, int z, BlockData b)
{
getSliver(x, z).set(y, b);
}
@Override
public void setRegion(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, Material arg6)
{
throw new UnsupportedOperationException("Use SetBlock (bd)");
}
@Deprecated
@Override
public void setRegion(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, MaterialData arg6)
{
throw new UnsupportedOperationException("Use SetBlock (bd)");
}
@Override
public void setRegion(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, BlockData arg6)
{
throw new UnsupportedOperationException("Use SetBlock (bd)");
}
}

View File

@ -3,7 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@ -145,7 +145,7 @@ public class IrisBiomeDecorator
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(String i : palette) for(String i : palette)
{ {
BlockData bx = BlockDataTools.getBlockData(i); BlockData bx = B.getBlockData(i);
if(bx != null) if(bx != null)
{ {
blockData.add(bx); blockData.add(bx);

View File

@ -3,7 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@ -103,7 +103,7 @@ public class IrisBiomePaletteLayer
KList<BlockData> blockData = new KList<>(); KList<BlockData> blockData = new KList<>();
for(String ix : palette) for(String ix : palette)
{ {
BlockData bx = BlockDataTools.getBlockData(ix); BlockData bx = B.getBlockData(ix);
if(bx != null) if(bx != null)
{ {
blockData.add(bx); blockData.add(bx);

View File

@ -2,8 +2,9 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@ -22,8 +23,8 @@ public class IrisCompatabilityFilter
@DontObfuscate @DontObfuscate
private boolean exact = false; private boolean exact = false;
private transient AtomicCache<BlockData> findData = new AtomicCache<>(); private transient AtomicCache<BlockData> findData = new AtomicCache<>(true);
private transient AtomicCache<BlockData> replaceData = new AtomicCache<>(); private transient AtomicCache<BlockData> replaceData = new AtomicCache<>(true);
public IrisCompatabilityFilter(String when, String supplement) public IrisCompatabilityFilter(String when, String supplement)
{ {
@ -44,11 +45,18 @@ public class IrisCompatabilityFilter
public BlockData getFind() public BlockData getFind()
{ {
return findData.aquire(() -> BlockDataTools.getBlockData(when)); return findData.aquire(() -> B.getBlockData(when));
} }
public BlockData getReplace() public BlockData getReplace()
{ {
return replaceData.aquire(() -> BlockDataTools.getBlockData(supplement)); return replaceData.aquire(() ->
{
BlockData b = B.getBlockData(supplement);
Iris.warn("Compat: Using " + supplement + " in place of " + when + " since this server doesnt support '" + supplement + "'");
return b;
});
} }
} }

View File

@ -7,7 +7,7 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.gen.TerrainChunkGenerator; import com.volmit.iris.gen.TerrainChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.KList; import com.volmit.iris.util.KList;
@ -114,7 +114,7 @@ public class IrisDepositGenerator
for(String ix : palette) for(String ix : palette)
{ {
BlockData bx = BlockDataTools.getBlockData(ix); BlockData bx = B.getBlockData(ix);
if(bx != null) if(bx != null)
{ {
@ -178,7 +178,7 @@ public class IrisDepositGenerator
BlockData b = data.getBlockData(nx, ny, nz); BlockData b = data.getBlockData(nx, ny, nz);
if(b.getMaterial().equals(Material.ICE) || b.getMaterial().equals(Material.SAND) || b.getMaterial().equals(Material.RED_SAND) || !b.getMaterial().isSolid()) 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.getMaterial().isSolid())
{ {
continue; continue;
} }

View File

@ -8,7 +8,7 @@ import org.bukkit.util.BlockVector;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.gen.PostBlockChunkGenerator; import com.volmit.iris.gen.PostBlockChunkGenerator;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.CNG; import com.volmit.iris.util.CNG;
import com.volmit.iris.util.ChunkPosition; import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
@ -250,15 +250,49 @@ public class IrisDimension extends IrisRegistrant
}); });
} }
private KList<IrisCompatabilityFilter> getDefaultCompatability() public static KList<IrisCompatabilityFilter> getDefaultCompatability()
{ {
KList<IrisCompatabilityFilter> filters = new KList<>(); KList<IrisCompatabilityFilter> filters = new KList<>();
// Below 1.16 // Below 1.16
// TODO MORE filters.add(new IrisCompatabilityFilter("WEEPING_VINES", "NETHER_FENCE"));
filters.add(new IrisCompatabilityFilter("WEEPING_VINES_PLANT", "NETHER_FENCE"));
filters.add(new IrisCompatabilityFilter("WARPED_WART_BLOCK", "NETHER_WART_BLOCK"));
filters.add(new IrisCompatabilityFilter("TWISTING_VINES", "BAMBOO"));
filters.add(new IrisCompatabilityFilter("TWISTING_VINES_PLANT", "BAMBOO"));
filters.add(new IrisCompatabilityFilter("TARGET", "COBBLESTONE"));
filters.add(new IrisCompatabilityFilter("SOUL_SOIL", "SOULSAND"));
filters.add(new IrisCompatabilityFilter("SOUL_TORCH", "TORCH"));
filters.add(new IrisCompatabilityFilter("SOUL_LANTERN", "LANTERN"));
filters.add(new IrisCompatabilityFilter("SOUL_FIRE", "FIRE"));
filters.add(new IrisCompatabilityFilter("SOUL_CAMPFIRE", "CAMPFIRE"));
filters.add(new IrisCompatabilityFilter("SHROOMLIGHT", "GLOWSTONE"));
filters.add(new IrisCompatabilityFilter("RESPAWN_ANCHOR", "OBSIDIAN"));
filters.add(new IrisCompatabilityFilter("NETHER_SPROUTS", "RED_MUSHROOM"));
filters.add(new IrisCompatabilityFilter("NETHER_GOLD_ORE", "GOLD_ORE"));
filters.add(new IrisCompatabilityFilter("LODESTONE", "STONE"));
filters.add(new IrisCompatabilityFilter("STRIPPED_WARPED_HYPHAE", "BROWN_MUSHROOM_BLOCK"));
filters.add(new IrisCompatabilityFilter("STRIPPED_CRIMSON_HYPHAE", "RED_MUSHROOM_BLOCK"));
filters.add(new IrisCompatabilityFilter("WARPED_HYPHAE", "MUSHROOM_STEM"));
filters.add(new IrisCompatabilityFilter("CRIMSON_HYPHAE", "RED_MUSHROOM_BLOCK"));
filters.add(new IrisCompatabilityFilter("GILDED_BLACKSTONE", "COBBLESTONE"));
filters.add(new IrisCompatabilityFilter("CRYING_OBSIDIAN", "OBSIDIAN"));
filters.add(new IrisCompatabilityFilter("STRIPPED_WARPED_STEM", "MUSHROOM_STEM"));
filters.add(new IrisCompatabilityFilter("STRIPPED_CRIMSON_STEM", "MUSHROOM_STEM"));
filters.add(new IrisCompatabilityFilter("WARPED_STEM", "MUSHROOM_STEM"));
filters.add(new IrisCompatabilityFilter("CRIMSON_STEM", "MUSHROOM_STEM"));
filters.add(new IrisCompatabilityFilter("CRIMSON_ROOTS", "RED_MUSHROOM"));
filters.add(new IrisCompatabilityFilter("WARPED_ROOTS", "BROWN_MUSHROOM"));
filters.add(new IrisCompatabilityFilter("CRIMSON_PLANKS", "OAK_PLANKS"));
filters.add(new IrisCompatabilityFilter("WARPED_PLANKS", "OAK_PLANKS"));
filters.add(new IrisCompatabilityFilter("WARPED_NYLIUM", "MYCELIUM"));
filters.add(new IrisCompatabilityFilter("CRIMSON_NYLIUM", "MYCELIUM"));
filters.add(new IrisCompatabilityFilter("WARPED_FUNGUS", "BROWN_MUSHROOM"));
filters.add(new IrisCompatabilityFilter("CRIMSON_FUNGUS", "RED_MUSHROOM"));
filters.add(new IrisCompatabilityFilter("CRACKED_NETHER_BRICKS", "NETHER_BRICKS"));
filters.add(new IrisCompatabilityFilter("CHISELED_NETHER_BRICKS", "NETHER_BRICKS")); filters.add(new IrisCompatabilityFilter("CHISELED_NETHER_BRICKS", "NETHER_BRICKS"));
filters.add(new IrisCompatabilityFilter("NETHER_FENCE", "LEGACY_NETHER_FENCE")); filters.add(new IrisCompatabilityFilter("NETHER_FENCE", "LEGACY_NETHER_FENCE"));
filters.add(new IrisCompatabilityFilter("CHAIN", "LEGACY_NETHER_FENCE")); filters.add(new IrisCompatabilityFilter("CHAIN", "IRON_BARS"));
filters.add(new IrisCompatabilityFilter("NETHERITE_BLOCK", "QUARTZ_BLOCK")); filters.add(new IrisCompatabilityFilter("NETHERITE_BLOCK", "QUARTZ_BLOCK"));
filters.add(new IrisCompatabilityFilter("BLACKSTONE", "COBBLESTONE")); filters.add(new IrisCompatabilityFilter("BLACKSTONE", "COBBLESTONE"));
filters.add(new IrisCompatabilityFilter("BASALT", "STONE")); filters.add(new IrisCompatabilityFilter("BASALT", "STONE"));
@ -272,6 +306,7 @@ public class IrisDimension extends IrisRegistrant
// Below 1.14 // Below 1.14
filters.add(new IrisCompatabilityFilter("GRANITE_WALL", "COBBLESTONE_WALL")); filters.add(new IrisCompatabilityFilter("GRANITE_WALL", "COBBLESTONE_WALL"));
filters.add(new IrisCompatabilityFilter("BLUE_ICE", "PACKED_ICE"));
filters.add(new IrisCompatabilityFilter("DIORITE_WALL", "COBBLESTONE_WALL")); filters.add(new IrisCompatabilityFilter("DIORITE_WALL", "COBBLESTONE_WALL"));
filters.add(new IrisCompatabilityFilter("ANDESITE_WALL", "COBBLESTONE_WALL")); filters.add(new IrisCompatabilityFilter("ANDESITE_WALL", "COBBLESTONE_WALL"));
filters.add(new IrisCompatabilityFilter("SWEET_BERRY_BUSH", "GRASS")); filters.add(new IrisCompatabilityFilter("SWEET_BERRY_BUSH", "GRASS"));
@ -351,7 +386,6 @@ public class IrisDimension extends IrisRegistrant
filters.add(new IrisCompatabilityFilter("BAMBOO", "BIRCH_FENCE")); filters.add(new IrisCompatabilityFilter("BAMBOO", "BIRCH_FENCE"));
filters.add(new IrisCompatabilityFilter("BAMBOO_SAPLING", "BIRCH_SAPLING")); filters.add(new IrisCompatabilityFilter("BAMBOO_SAPLING", "BIRCH_SAPLING"));
filters.add(new IrisCompatabilityFilter("POTTED_BAMBOO", "POTTED_BIRCH_SAPLING")); filters.add(new IrisCompatabilityFilter("POTTED_BAMBOO", "POTTED_BIRCH_SAPLING"));
filters.add(new IrisCompatabilityFilter("*", "STONE"));
return filters; return filters;
} }
@ -370,9 +404,6 @@ public class IrisDimension extends IrisRegistrant
{ {
KList<IrisPostProcessor> p = new KList<IrisPostProcessor>(); KList<IrisPostProcessor> p = new KList<IrisPostProcessor>();
p.add(new IrisPostProcessor("nib-smoother"));
p.add(new IrisPostProcessor("floating-block-remover"));
p.add(new IrisPostProcessor("pothole-filler"));
p.add(new IrisPostProcessor("wall-painter")); p.add(new IrisPostProcessor("wall-painter"));
p.add(new IrisPostProcessor("slabber")); p.add(new IrisPostProcessor("slabber"));
p.add(new IrisPostProcessor("waterlogger", 1)); p.add(new IrisPostProcessor("waterlogger", 1));
@ -430,7 +461,7 @@ public class IrisDimension extends IrisRegistrant
KList<BlockData> rockData = new KList<>(); KList<BlockData> rockData = new KList<>();
for(String ix : rockPalette) for(String ix : rockPalette)
{ {
BlockData bx = BlockDataTools.getBlockData(ix); BlockData bx = B.getBlockData(ix);
if(bx != null) if(bx != null)
{ {
rockData.add(bx); rockData.add(bx);
@ -491,7 +522,7 @@ public class IrisDimension extends IrisRegistrant
KList<BlockData> fluidData = new KList<>(); KList<BlockData> fluidData = new KList<>();
for(String ix : fluidPalette) for(String ix : fluidPalette)
{ {
BlockData bx = BlockDataTools.getBlockData(ix); BlockData bx = B.getBlockData(ix);
if(bx != null) if(bx != null)
{ {
fluidData.add(bx); fluidData.add(bx);
@ -610,4 +641,17 @@ public class IrisDimension extends IrisRegistrant
return new ChunkPosition(x, z); return new ChunkPosition(x, z);
}); });
} }
public BlockData resolve(String bd)
{
for(IrisCompatabilityFilter i : getCompatability())
{
if(i.getWhen().equalsIgnoreCase(bd))
{
return i.getReplace();
}
}
return null;
}
} }

View File

@ -15,7 +15,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Leaves; import org.bukkit.block.data.type.Leaves;
import org.bukkit.util.BlockVector; import org.bukkit.util.BlockVector;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.ChunkPosition; import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.IObjectPlacer; import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.KMap; import com.volmit.iris.util.KMap;
@ -29,8 +29,8 @@ import lombok.EqualsAndHashCode;
public class IrisObject extends IrisRegistrant public class IrisObject extends IrisRegistrant
{ {
private static final Material SNOW = Material.SNOW; private static final Material SNOW = Material.SNOW;
private static final BlockData AIR = BlockDataTools.getBlockData("CAVE_AIR"); private static final BlockData AIR = B.getBlockData("CAVE_AIR");
private static final BlockData[] SNOW_LAYERS = new BlockData[] {BlockDataTools.getBlockData("minecraft:snow[layers=1]"), BlockDataTools.getBlockData("minecraft:snow[layers=2]"), BlockDataTools.getBlockData("minecraft:snow[layers=3]"), BlockDataTools.getBlockData("minecraft:snow[layers=4]"), BlockDataTools.getBlockData("minecraft:snow[layers=5]"), BlockDataTools.getBlockData("minecraft:snow[layers=6]"), BlockDataTools.getBlockData("minecraft:snow[layers=7]"), BlockDataTools.getBlockData("minecraft:snow[layers=8]")}; 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 KMap<BlockVector, BlockData> blocks; private KMap<BlockVector, BlockData> blocks;
private int w; private int w;
private int d; private int d;
@ -66,7 +66,7 @@ public class IrisObject extends IrisRegistrant
for(int i = 0; i < s; i++) for(int i = 0; i < s; i++)
{ {
blocks.put(new BlockVector(din.readShort(), din.readShort(), din.readShort()), BlockDataTools.getBlockData(din.readUTF())); blocks.put(new BlockVector(din.readShort(), din.readShort(), din.readShort()), B.getBlockData(din.readUTF()));
} }
} }

View File

@ -3,7 +3,7 @@ package com.volmit.iris.object;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.gen.atomics.AtomicCache; import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.util.BlockDataTools; import com.volmit.iris.util.B;
import com.volmit.iris.util.Desc; import com.volmit.iris.util.Desc;
import com.volmit.iris.util.DontObfuscate; import com.volmit.iris.util.DontObfuscate;
@ -32,11 +32,11 @@ public class IrisObjectReplace
public BlockData getFind() public BlockData getFind()
{ {
return findData.aquire(() -> BlockDataTools.getBlockData(find)); return findData.aquire(() -> B.getBlockData(find));
} }
public BlockData getReplace() public BlockData getReplace()
{ {
return replaceData.aquire(() -> BlockDataTools.getBlockData(replace)); return replaceData.aquire(() -> B.getBlockData(replace));
} }
} }

View File

@ -5,17 +5,36 @@ import org.bukkit.Material;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisDimension;
public class BlockDataTools public class B
{ {
private static final BlockData AIR = Material.AIR.createBlockData(); private static final BlockData AIR = Material.AIR.createBlockData();
private static final KMap<String, BlockData> bdc = new KMap<>(); private static final KMap<String, BlockData> bdc = new KMap<>();
private static final KList<String> nulls = new KList<>(); private static final KList<String> nulls = new KList<>();
private static final IrisDimension defaultCompat = new IrisDimension();
public static BlockData get(String bd)
{
return getBlockData(bd);
}
public static Material mat(String bd)
{
return getBlockData(bd).getMaterial();
}
public static BlockData getBlockData(String bd) public static BlockData getBlockData(String bd)
{
return getBlockData(bd, defaultCompat);
}
public static BlockData getBlockData(String bdxf, IrisDimension resolver)
{ {
try try
{ {
String bd = bdxf.trim();
if(bdc.containsKey(bd)) if(bdc.containsKey(bd))
{ {
return bdc.get(bd).clone(); return bdc.get(bd).clone();
@ -23,6 +42,11 @@ public class BlockDataTools
BlockData bdx = parseBlockData(bd); BlockData bdx = parseBlockData(bd);
if(bdx == null)
{
bdx = resolver.resolve(bd);
}
if(bdx == null) if(bdx == null)
{ {
Iris.warn("Unknown Block Data '" + bd + "'"); Iris.warn("Unknown Block Data '" + bd + "'");
@ -37,7 +61,7 @@ public class BlockDataTools
catch(Throwable e) catch(Throwable e)
{ {
Iris.warn("Unknown Block Data '" + bd + "'"); Iris.warn("Unknown Block Data '" + bdxf + "'");
} }
return AIR; return AIR;
@ -86,7 +110,7 @@ public class BlockDataTools
public static boolean isLit(Material mat) public static boolean isLit(Material mat)
{ {
if(mat.equals(Material.GLOWSTONE) || mat.equals(Material.TORCH) || mat.equals(Material.REDSTONE_TORCH) || mat.equals(Material.SOUL_TORCH) || mat.equals(Material.REDSTONE_WALL_TORCH) || mat.equals(Material.WALL_TORCH) || mat.equals(Material.SOUL_WALL_TORCH) || mat.equals(Material.LANTERN) || mat.equals(Material.JACK_O_LANTERN) || mat.equals(Material.REDSTONE_LAMP) || mat.equals(Material.MAGMA_BLOCK) || mat.equals(Material.SEA_LANTERN) || mat.equals(Material.SOUL_LANTERN) || mat.equals(Material.FIRE) || mat.equals(Material.SOUL_FIRE) || mat.equals(Material.SEA_PICKLE) || mat.equals(Material.BREWING_STAND) || mat.equals(Material.REDSTONE_ORE)) if(mat.equals(B.mat("GLOWSTONE")) || 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("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))
{ {
return true; return true;
} }
@ -96,7 +120,7 @@ public class BlockDataTools
public static boolean canPlaceOnto(Material mat, Material onto) public static boolean canPlaceOnto(Material mat, Material onto)
{ {
if(onto.equals(Material.AIR) || onto.equals(Material.CAVE_AIR)) if(onto.equals(Material.AIR) || onto.equals(B.mat("CAVE_AIR")))
{ {
return false; return false;
} }
@ -114,9 +138,9 @@ public class BlockDataTools
} }
} }
if(onto.equals(Material.STONE) || onto.equals(Material.GRAVEL) || onto.equals(Material.GRAVEL) || onto.equals(Material.ANDESITE) || onto.equals(Material.GRANITE) || onto.equals(Material.DIORITE) || onto.equals(Material.BLACKSTONE) || onto.equals(Material.BASALT)) if(onto.equals(Material.STONE) || onto.equals(Material.GRAVEL) || onto.equals(Material.GRAVEL) || onto.equals(Material.ANDESITE) || onto.equals(Material.GRANITE) || onto.equals(Material.DIORITE) || onto.equals(B.mat("BLACKSTONE")) || onto.equals(B.mat("BASALT")))
{ {
if(mat.equals(Material.POPPY) || mat.equals(Material.DANDELION) || mat.equals(Material.CORNFLOWER) || 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)) if(mat.equals(Material.POPPY) || mat.equals(Material.DANDELION) || mat.equals(B.mat("CORNFLOWER")) || 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 false; return false;
} }
@ -138,7 +162,7 @@ public class BlockDataTools
//@builder //@builder
return m.equals(Material.GRASS) return m.equals(Material.GRASS)
|| m.equals(Material.TALL_GRASS) || m.equals(Material.TALL_GRASS)
|| m.equals(Material.CORNFLOWER) || m.equals(B.mat("CORNFLOWER"))
|| m.equals(Material.SUNFLOWER) || m.equals(Material.SUNFLOWER)
|| m.equals(Material.CHORUS_FLOWER) || m.equals(Material.CHORUS_FLOWER)
|| m.equals(Material.POPPY) || m.equals(Material.POPPY)
@ -150,44 +174,44 @@ public class BlockDataTools
|| m.equals(Material.WHITE_TULIP) || m.equals(Material.WHITE_TULIP)
|| m.equals(Material.LILAC) || m.equals(Material.LILAC)
|| m.equals(Material.DEAD_BUSH) || m.equals(Material.DEAD_BUSH)
|| m.equals(Material.SWEET_BERRY_BUSH) || m.equals(B.mat("SWEET_BERRY_BUSH"))
|| m.equals(Material.ROSE_BUSH) || m.equals(Material.ROSE_BUSH)
|| m.equals(Material.WITHER_ROSE) || m.equals(B.mat("WITHER_ROSE"))
|| m.equals(Material.ALLIUM) || m.equals(Material.ALLIUM)
|| m.equals(Material.BLUE_ORCHID) || m.equals(Material.BLUE_ORCHID)
|| m.equals(Material.LILY_OF_THE_VALLEY) || m.equals(B.mat("LILY_OF_THE_VALLEY"))
|| m.equals(Material.CRIMSON_FUNGUS) || m.equals(B.mat("CRIMSON_FUNGUS"))
|| m.equals(Material.WARPED_FUNGUS) || m.equals(B.mat("WARPED_FUNGUS"))
|| m.equals(Material.RED_MUSHROOM) || m.equals(Material.RED_MUSHROOM)
|| m.equals(Material.BROWN_MUSHROOM) || m.equals(Material.BROWN_MUSHROOM)
|| m.equals(Material.CRIMSON_ROOTS) || m.equals(B.mat("CRIMSON_ROOTS"))
|| m.equals(Material.AZURE_BLUET) || m.equals(B.mat("AZURE_BLUET"))
|| m.equals(Material.WEEPING_VINES) || m.equals(B.mat("WEEPING_VINES"))
|| m.equals(Material.WEEPING_VINES_PLANT) || m.equals(B.mat("WEEPING_VINES_PLANT"))
|| m.equals(Material.WARPED_ROOTS) || m.equals(B.mat("WARPED_ROOTS"))
|| m.equals(Material.NETHER_SPROUTS) || m.equals(B.mat("NETHER_SPROUTS"))
|| m.equals(Material.TWISTING_VINES) || m.equals(B.mat("TWISTING_VINES"))
|| m.equals(Material.TWISTING_VINES_PLANT) || m.equals(B.mat("TWISTING_VINES_PLANT"))
|| m.equals(Material.SUGAR_CANE) || m.equals(Material.SUGAR_CANE)
|| m.equals(Material.WHEAT) || m.equals(Material.WHEAT)
|| m.equals(Material.POTATOES) || m.equals(Material.POTATOES)
|| m.equals(Material.CARROTS) || m.equals(Material.CARROTS)
|| m.equals(Material.BEETROOTS) || m.equals(Material.BEETROOTS)
|| m.equals(Material.NETHER_WART) || m.equals(Material.NETHER_WART)
|| m.equals(Material.SEA_PICKLE) || m.equals(B.mat("SEA_PICKLE"))
|| m.equals(Material.SEAGRASS) || m.equals(B.mat("SEAGRASS"))
|| m.equals(Material.ACACIA_BUTTON) || m.equals(B.mat("ACACIA_BUTTON"))
|| m.equals(Material.BIRCH_BUTTON) || m.equals(B.mat("BIRCH_BUTTON"))
|| m.equals(Material.CRIMSON_BUTTON) || m.equals(B.mat("CRIMSON_BUTTON"))
|| m.equals(Material.DARK_OAK_BUTTON) || m.equals(B.mat("DARK_OAK_BUTTON"))
|| m.equals(Material.JUNGLE_BUTTON) || m.equals(B.mat("JUNGLE_BUTTON"))
|| m.equals(Material.OAK_BUTTON) || m.equals(B.mat("OAK_BUTTON"))
|| m.equals(Material.POLISHED_BLACKSTONE_BUTTON) || m.equals(B.mat("POLISHED_BLACKSTONE_BUTTON"))
|| m.equals(Material.SPRUCE_BUTTON) || m.equals(B.mat("SPRUCE_BUTTON"))
|| m.equals(Material.STONE_BUTTON) || m.equals(B.mat("STONE_BUTTON"))
|| m.equals(Material.WARPED_BUTTON) || m.equals(B.mat("WARPED_BUTTON"))
|| m.equals(Material.TORCH) || m.equals(Material.TORCH)
|| m.equals(Material.SOUL_TORCH); || m.equals(B.mat("SOUL_TORCH"));
//@done //@done
} }
} }

View File

@ -1,5 +1,6 @@
package com.volmit.iris.util; package com.volmit.iris.util;
@SuppressWarnings("hiding")
@FunctionalInterface @FunctionalInterface
public interface Consumer2<A, B> public interface Consumer2<A, B>
{ {

View File

@ -1,5 +1,6 @@
package com.volmit.iris.util; package com.volmit.iris.util;
@SuppressWarnings("hiding")
@FunctionalInterface @FunctionalInterface
public interface Consumer3<A, B, C> public interface Consumer3<A, B, C>
{ {

View File

@ -1,5 +1,6 @@
package com.volmit.iris.util; package com.volmit.iris.util;
@SuppressWarnings("hiding")
@FunctionalInterface @FunctionalInterface
public interface Function2<A, B, R> public interface Function2<A, B, R>
{ {

View File

@ -1,5 +1,6 @@
package com.volmit.iris.util; package com.volmit.iris.util;
@SuppressWarnings("hiding")
@FunctionalInterface @FunctionalInterface
public interface Function3<A, B, C, R> public interface Function3<A, B, C, R>
{ {

View File

@ -1,5 +1,6 @@
package com.volmit.iris.util; package com.volmit.iris.util;
@SuppressWarnings("hiding")
@FunctionalInterface @FunctionalInterface
public interface Function4<A, B, C, D, R> public interface Function4<A, B, C, D, R>
{ {