diff --git a/pom.xml b/pom.xml
index 9a1ca2994..e39e2e206 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
bytecode.ninja
Iris
- 1.0.2
+ 1.0.3
Iris
false
diff --git a/scripts/release.bat b/scripts/release.bat
index 5d55bb425..266cb9c76 100644
--- a/scripts/release.bat
+++ b/scripts/release.bat
@@ -3,11 +3,7 @@ echo Apply Script: COPY
echo F|xcopy /y /s /f /q "%1" "%2"
echo F|xcopy /y /s /f /q "lint/in.jar" "release/latest/Origin-%3.jar"
echo Starting the Washing Machine
-cd lint
-java -Xmx4g -Xms1m -jar proguard.jar @proguard.conf
-cd ..
-echo F|xcopy /y /s /f /q "lint/out.jar" "release/latest/Iris-%3.jar"
-echo F|xcopy /y /s /f /q "lint/mapping.txt" "release/latest/mapping-%3.txt"
+echo F|xcopy /y /s /f /q "lint/in.jar" "release/latest/Iris-%3.jar"
cd release
echo F|xcopy /y /s /f /q /E "latest" "%3/"
rmdir /Q/S latest
\ No newline at end of file
diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java
index f989283ac..b9cdbc569 100644
--- a/src/main/java/com/volmit/iris/Iris.java
+++ b/src/main/java/com/volmit/iris/Iris.java
@@ -30,6 +30,7 @@ import com.volmit.iris.manager.IrisHotloadManager;
import com.volmit.iris.manager.ProjectManager;
import com.volmit.iris.manager.StructureManager;
import com.volmit.iris.manager.WandManager;
+import com.volmit.iris.object.IrisCompat;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.GroupedExecutor;
@@ -60,6 +61,7 @@ public class Iris extends MortarPlugin
public static boolean awareEntities = doesSupportAwareness();
public static boolean biome3d = doesSupport3DBiomes();
public static boolean lowMemoryMode = false;
+ public static IrisCompat compat;
@Permission
public static PermissionIris perm;
@@ -141,6 +143,7 @@ public class Iris extends MortarPlugin
public void onEnable()
{
instance = this;
+ compat = IrisCompat.configured(getDataFile("compat.json"));
lock = new IrisLock("Iris");
proj = new ProjectManager();
hotloader = new IrisHotloadManager();
diff --git a/src/main/java/com/volmit/iris/object/IrisCompat.java b/src/main/java/com/volmit/iris/object/IrisCompat.java
new file mode 100644
index 000000000..7d558cd12
--- /dev/null
+++ b/src/main/java/com/volmit/iris/object/IrisCompat.java
@@ -0,0 +1,379 @@
+package com.volmit.iris.object;
+
+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.IO;
+import com.volmit.iris.util.KList;
+import com.volmit.iris.util.KMap;
+
+import lombok.Data;
+
+@Data
+public class IrisCompat
+{
+ private KList blockFilters = new KList<>();
+ private KList itemFilters = new KList<>();
+ private transient KMap blockResolves = new KMap<>();
+ private transient KMap itemResolves = new KMap<>();
+
+ public IrisCompat()
+ {
+ blockFilters = getDefaultBlockCompatabilityFilters();
+ itemFilters = getDefaultItemCompatabilityFilters();
+ }
+
+ public BlockData getBlock(String n)
+ {
+ return blockResolves.compute(n, (k, v) ->
+ {
+ if(k != null && v != null)
+ {
+ return v;
+ }
+
+ String buf = k;
+ int err = 16;
+
+ BlockData tx = B.parseBlockDataOrNull(buf);
+
+ if(tx != null)
+ {
+ return tx;
+ }
+
+ searching: while(true)
+ {
+ if(err-- <= 0)
+ {
+ return B.parseBlockDataOrNull("STONE");
+ }
+
+ for(IrisCompatabilityBlockFilter i : blockFilters)
+ {
+ if(i.getWhen().equalsIgnoreCase(buf))
+ {
+ BlockData b = i.getReplace();
+
+ if(b != null)
+ {
+ return b;
+ }
+
+ buf = i.getSupplement();
+ continue searching;
+ }
+ }
+
+ return B.parseBlockDataOrNull("STONE");
+ }
+ });
+ }
+
+ public Material getItem(String n)
+ {
+ return itemResolves.compute(n, (k, v) ->
+ {
+ if(k != null && v != null)
+ {
+ return v;
+ }
+
+ String buf = k;
+ int err = 16;
+ Material txf = B.getMaterialOrNull(buf);
+
+ if(txf != null)
+ {
+ return txf;
+ }
+
+ searching: while(true)
+ {
+ if(err-- <= 0)
+ {
+ break;
+ }
+
+ for(IrisCompatabilityItemFilter i : itemFilters)
+ {
+ if(i.getWhen().equalsIgnoreCase(buf))
+ {
+ Material b = i.getReplace();
+
+ if(b != null)
+ {
+ return b;
+ }
+
+ buf = i.getSupplement();
+ continue searching;
+ }
+ }
+
+ break;
+ }
+
+ buf = k;
+ BlockData tx = B.parseBlockDataOrNull(buf);
+
+ if(tx != null)
+ {
+ return tx.getMaterial();
+ }
+
+ searching: while(true)
+ {
+ if(err-- <= 0)
+ {
+ return B.parseBlockDataOrNull("STONE").getMaterial();
+ }
+
+ for(IrisCompatabilityBlockFilter i : blockFilters)
+ {
+ if(i.getWhen().equalsIgnoreCase(buf))
+ {
+ BlockData b = i.getReplace();
+
+ if(b != null)
+ {
+ return b.getMaterial();
+ }
+
+ buf = i.getSupplement();
+ continue searching;
+ }
+ }
+
+ return B.parseBlockDataOrNull("STONE").getMaterial();
+ }
+ });
+ }
+
+ public static IrisCompat configured(File f)
+ {
+ IrisCompat def = new IrisCompat();
+
+ if(!f.exists())
+ {
+ try
+ {
+ IO.writeAll(f, new Gson().toJson(def));
+ }
+
+ catch(IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ try
+ {
+ IrisCompat rea = new Gson().fromJson(IO.readAll(f), IrisCompat.class);
+
+ for(IrisCompatabilityBlockFilter i : rea.getBlockFilters())
+ {
+ def.getBlockFilters().add(0, i);
+ }
+
+ for(IrisCompatabilityItemFilter i : rea.getItemFilters())
+ {
+ def.getItemFilters().add(0, i);
+ }
+ }
+
+ catch(JsonSyntaxException | IOException e)
+ {
+ e.printStackTrace();
+ }
+
+ return def;
+ }
+
+ private static KList getDefaultItemCompatabilityFilters()
+ {
+ KList filters = new KList<>();
+
+ // Below 1.16
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_HELMET", "DIAMOND_HELMET"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_CHESTPLATE", "DIAMOND_CHESTPLATE"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_BOOTS", "DIAMOND_BOOTS"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_LEGGINGS", "DIAMOND_LEGGINGS"));
+ filters.add(new IrisCompatabilityItemFilter("MUSIC_DISC_PIGSTEP", "MUSIC_DISC_FAR"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_SWORD", "DIAMOND_SWORD"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_AXE", "DIAMOND_AXE"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_PICKAXE", "DIAMOND_PICKAXE"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_HOE", "DIAMOND_HOE"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_SHOVEL", "DIAMOND_SHOVEL"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_INGOT", "DIAMOND"));
+ filters.add(new IrisCompatabilityItemFilter("PIGLIN_BANNER_PATTERN", "PORKCHOP"));
+ filters.add(new IrisCompatabilityItemFilter("NETHERITE_SCRAP", "GOLD_INGOT"));
+ filters.add(new IrisCompatabilityItemFilter("WARPED_FUNGUS_ON_A_STICK", "CARROT_ON_A_STICK"));
+
+ // Below 1.15
+ filters.add(new IrisCompatabilityItemFilter("HONEY_BOTTLE", "GLASS_BOTTLE"));
+ filters.add(new IrisCompatabilityItemFilter("HONEYCOMB", "GLASS"));
+
+ // Below 1.14
+ filters.add(new IrisCompatabilityItemFilter("SWEET_BERRIES", "APPLE"));
+ filters.add(new IrisCompatabilityItemFilter("SUSPICIOUS_STEW", "MUSHROOM_STEW"));
+ filters.add(new IrisCompatabilityItemFilter("BLACK_DYE", "INK_SAC"));
+ filters.add(new IrisCompatabilityItemFilter("WHITE_DYE", "BONE_MEAL"));
+ filters.add(new IrisCompatabilityItemFilter("BROWN_DYE", "COCOA_BEANS"));
+ filters.add(new IrisCompatabilityItemFilter("BLUE_DYE", "LAPIS_LAZULI"));
+ filters.add(new IrisCompatabilityItemFilter("CROSSBOW", "BOW"));
+ filters.add(new IrisCompatabilityItemFilter("FLOWER_BANNER_PATTERN", "CORNFLOWER"));
+ filters.add(new IrisCompatabilityItemFilter("SKULL_BANNER_PATTERN", "BONE"));
+ filters.add(new IrisCompatabilityItemFilter("GLOBE_BANNER_PATTERN", "WHEAT_SEEDS"));
+ filters.add(new IrisCompatabilityItemFilter("MOJANG_BANNER_PATTERN", "DIRT"));
+ filters.add(new IrisCompatabilityItemFilter("CREEPER_BANNER_PATTERN", "CREEPER_HEAD"));
+
+ return filters;
+ }
+
+ private static KList getDefaultBlockCompatabilityFilters()
+ {
+ KList filters = new KList<>();
+
+ // Below 1.16
+ filters.add(new IrisCompatabilityBlockFilter("WEEPING_VINES", "NETHER_FENCE"));
+ filters.add(new IrisCompatabilityBlockFilter("WEEPING_VINES_PLANT", "NETHER_FENCE"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_WART_BLOCK", "NETHER_WART_BLOCK"));
+ filters.add(new IrisCompatabilityBlockFilter("TWISTING_VINES", "BAMBOO"));
+ filters.add(new IrisCompatabilityBlockFilter("TWISTING_VINES_PLANT", "BAMBOO"));
+ filters.add(new IrisCompatabilityBlockFilter("TARGET", "COBBLESTONE"));
+ filters.add(new IrisCompatabilityBlockFilter("SOUL_SOIL", "SOULSAND"));
+ filters.add(new IrisCompatabilityBlockFilter("SOUL_TORCH", "TORCH"));
+ filters.add(new IrisCompatabilityBlockFilter("SOUL_LANTERN", "LANTERN"));
+ filters.add(new IrisCompatabilityBlockFilter("SOUL_FIRE", "FIRE"));
+ filters.add(new IrisCompatabilityBlockFilter("SOUL_CAMPFIRE", "CAMPFIRE"));
+ filters.add(new IrisCompatabilityBlockFilter("SHROOMLIGHT", "GLOWSTONE"));
+ filters.add(new IrisCompatabilityBlockFilter("RESPAWN_ANCHOR", "OBSIDIAN"));
+ filters.add(new IrisCompatabilityBlockFilter("NETHER_SPROUTS", "RED_MUSHROOM"));
+ filters.add(new IrisCompatabilityBlockFilter("NETHER_GOLD_ORE", "GOLD_ORE"));
+ filters.add(new IrisCompatabilityBlockFilter("LODESTONE", "STONE"));
+ filters.add(new IrisCompatabilityBlockFilter("STRIPPED_WARPED_HYPHAE", "BROWN_MUSHROOM_BLOCK"));
+ filters.add(new IrisCompatabilityBlockFilter("STRIPPED_CRIMSON_HYPHAE", "RED_MUSHROOM_BLOCK"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_HYPHAE", "MUSHROOM_STEM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_HYPHAE", "RED_MUSHROOM_BLOCK"));
+ filters.add(new IrisCompatabilityBlockFilter("GILDED_BLACKSTONE", "COBBLESTONE"));
+ filters.add(new IrisCompatabilityBlockFilter("CRYING_OBSIDIAN", "OBSIDIAN"));
+ filters.add(new IrisCompatabilityBlockFilter("STRIPPED_WARPED_STEM", "MUSHROOM_STEM"));
+ filters.add(new IrisCompatabilityBlockFilter("STRIPPED_CRIMSON_STEM", "MUSHROOM_STEM"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_STEM", "MUSHROOM_STEM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_STEM", "MUSHROOM_STEM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_ROOTS", "RED_MUSHROOM"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_ROOTS", "BROWN_MUSHROOM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_PLANKS", "OAK_PLANKS"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_PLANKS", "OAK_PLANKS"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_NYLIUM", "MYCELIUM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_NYLIUM", "MYCELIUM"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_FUNGUS", "BROWN_MUSHROOM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_FUNGUS", "RED_MUSHROOM"));
+ filters.add(new IrisCompatabilityBlockFilter("CRACKED_NETHER_BRICKS", "NETHER_BRICKS"));
+ filters.add(new IrisCompatabilityBlockFilter("CHISELED_NETHER_BRICKS", "NETHER_BRICKS"));
+ filters.add(new IrisCompatabilityBlockFilter("NETHER_FENCE", "LEGACY_NETHER_FENCE"));
+ filters.add(new IrisCompatabilityBlockFilter("CHAIN", "IRON_BARS"));
+ filters.add(new IrisCompatabilityBlockFilter("NETHERITE_BLOCK", "QUARTZ_BLOCK"));
+ filters.add(new IrisCompatabilityBlockFilter("BLACKSTONE", "COBBLESTONE"));
+ filters.add(new IrisCompatabilityBlockFilter("BASALT", "STONE"));
+ filters.add(new IrisCompatabilityBlockFilter("ANCIENT_DEBRIS", "NETHERRACK"));
+ filters.add(new IrisCompatabilityBlockFilter("NETHERRACK", "LEGACY_NETHERRACK"));
+
+ // Below 1.15
+ filters.add(new IrisCompatabilityBlockFilter("HONEY_BLOCK", "OAK_LEAVES"));
+ filters.add(new IrisCompatabilityBlockFilter("BEEHIVE", "OAK_LEAVES"));
+ filters.add(new IrisCompatabilityBlockFilter("BEE_NEST", "OAK_LEAVES"));
+
+ // Below 1.14
+ filters.add(new IrisCompatabilityBlockFilter("GRANITE_WALL", "COBBLESTONE_WALL"));
+ filters.add(new IrisCompatabilityBlockFilter("BLUE_ICE", "PACKED_ICE"));
+ filters.add(new IrisCompatabilityBlockFilter("DIORITE_WALL", "COBBLESTONE_WALL"));
+ filters.add(new IrisCompatabilityBlockFilter("ANDESITE_WALL", "COBBLESTONE_WALL"));
+ filters.add(new IrisCompatabilityBlockFilter("SWEET_BERRY_BUSH", "GRASS"));
+ filters.add(new IrisCompatabilityBlockFilter("STONECUTTER", "CRAFTING_TABLE"));
+ filters.add(new IrisCompatabilityBlockFilter("SANDSTONE_STAIRS", "LEGACY_SANDSTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOOTH_SANDSTONE_STAIRS", "LEGACY_SANDSTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("MOSSY_COBBLESTONE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("MOSSY_STONE_BRICK_STAIRS", "STONE_BRICK_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("POLISHED_GRANITE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("GRANITE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("POLISHED_DIORITE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("DIORITE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("POLISHED_ANDESITE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("ANDESITE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("STONE_STAIRS", "COBBLESTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("END_STONE_BRICK_STAIRS", "LEGACY_SANDSTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("NETHER_BRICK_STAIRS", "LEGACY_NETHER_BRICK_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("RED_NETHER_BRICK_STAIRS", "NETHER_BRICK_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOOTH_QUARTZ_STAIRS", "LEGACY_QUARTZ_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("QUARTZ_STAIRS", "LEGACY_QUARTZ_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("RED_SANDSTONE_STAIRS", "LEGACY_RED_SANDSTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOOTH_RED_SANDSTONE_STAIRS", "LEGACY_RED_SANDSTONE_STAIRS"));
+ filters.add(new IrisCompatabilityBlockFilter("STONE_SLAB", "SMOOTH_STONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOKER", "FURNACE"));
+ filters.add(new IrisCompatabilityBlockFilter("SMITHING_TABLE", "CRAFTING_TABLE"));
+ filters.add(new IrisCompatabilityBlockFilter("END_STONE_BRICK_SLAB", "SANDSTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("RED_NETHER_BRICK_SLAB", "NETHER_BRICK_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOOTH_QUARTZ_SLAB", "QUARTZ_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("CUT_SANDSTONE_SLAB", "SANDSTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("CUT_RED_SANDSTONE_SLAB", "RED_SANDSTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOOTH_RED_SANDSTONE_SLAB", "RED_SANDSTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("SMOOTH_SANDSTONE_SLAB", "SANDSTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("MOSSY_COBBLESTONE_SLAB", "COBBLESTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("MOSSY_STONE_BRICK_SLAB", "STONE_BRICK_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("STONE_SLAB", "SMOOTH_STONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("ANDESITE_SLAB", "COBBLESTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("ANDESITE_SLAB", "COBBLESTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("DIORITE_SLAB", "COBBLESTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("GRANITE_SLAB", "COBBLESTONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("POLISHED_ANDESITE_SLAB", "SMOOTH_STONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("POLISHED_DIORITE_SLAB", "SMOOTH_STONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("POLISHED_GRANITE_SLAB", "SMOOTH_STONE_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("WARPED_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("SPRUCE_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("SPRUCE_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("OAK_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("OAK_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("JUNGLE_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("JUNGLE_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("DARK_OAK_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("DARK_OAK_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("CRIMSON_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("BIRCH_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("BIRCH_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("ACACIA_WALL_SIGN", "LEGACY_WALL_SIGN"));
+ filters.add(new IrisCompatabilityBlockFilter("ACACIA_SIGN", "LEGACY_SIGN_POST"));
+ filters.add(new IrisCompatabilityBlockFilter("SCAFFOLDING", "BIRCH_FENCE"));
+ filters.add(new IrisCompatabilityBlockFilter("LOOM", "LOOM"));
+ filters.add(new IrisCompatabilityBlockFilter("LECTERN", "BOOKSHELF"));
+ filters.add(new IrisCompatabilityBlockFilter("LANTERN", "REDSTONE_LAMP"));
+ filters.add(new IrisCompatabilityBlockFilter("JIGSAW", "AIR"));
+ filters.add(new IrisCompatabilityBlockFilter("GRINDSTONE", "COBBLESTONE"));
+ filters.add(new IrisCompatabilityBlockFilter("FLETCHING_TABLE", "CRAFTING_TABLE"));
+ filters.add(new IrisCompatabilityBlockFilter("COMPOSTER", "CHEST"));
+ filters.add(new IrisCompatabilityBlockFilter("CARTOGRAPHY_TABLE", "CRAFTING_TABLE"));
+ filters.add(new IrisCompatabilityBlockFilter("CAMPFIRE", "DARK_OAK_SLAB"));
+ filters.add(new IrisCompatabilityBlockFilter("BLAST_FURNACE", "FURNACE"));
+ filters.add(new IrisCompatabilityBlockFilter("BELL", "REDSTONE_LAMP"));
+ filters.add(new IrisCompatabilityBlockFilter("minecraft:barrel[facing=south]", "minecraft:hay_bale[axis=z]", true));
+ filters.add(new IrisCompatabilityBlockFilter("minecraft:barrel[facing=north]", "minecraft:hay_bale[axis=z]", true));
+ filters.add(new IrisCompatabilityBlockFilter("minecraft:barrel[facing=east]", "minecraft:hay_bale[axis=x]", true));
+ filters.add(new IrisCompatabilityBlockFilter("minecraft:barrel[facing=west]", "minecraft:hay_bale[axis=x]", true));
+ filters.add(new IrisCompatabilityBlockFilter("minecraft:barrel[facing=up]", "minecraft:hay_bale[axis=y]", true));
+ filters.add(new IrisCompatabilityBlockFilter("minecraft:barrel[facing=down]", "minecraft:hay_bale[axis=y]", true));
+ filters.add(new IrisCompatabilityBlockFilter("BAMBOO", "BIRCH_FENCE"));
+ filters.add(new IrisCompatabilityBlockFilter("BAMBOO_SAPLING", "BIRCH_SAPLING"));
+ filters.add(new IrisCompatabilityBlockFilter("POTTED_BAMBOO", "POTTED_BIRCH_SAPLING"));
+
+ return filters;
+ }
+}
diff --git a/src/main/java/com/volmit/iris/object/IrisCompatabilityFilter.java b/src/main/java/com/volmit/iris/object/IrisCompatabilityBlockFilter.java
similarity index 87%
rename from src/main/java/com/volmit/iris/object/IrisCompatabilityFilter.java
rename to src/main/java/com/volmit/iris/object/IrisCompatabilityBlockFilter.java
index 04bbf3b3b..86ca701ff 100644
--- a/src/main/java/com/volmit/iris/object/IrisCompatabilityFilter.java
+++ b/src/main/java/com/volmit/iris/object/IrisCompatabilityBlockFilter.java
@@ -19,7 +19,7 @@ import lombok.experimental.Accessors;
@AllArgsConstructor
@Desc("Find and replace object materials for compatability")
@Data
-public class IrisCompatabilityFilter
+public class IrisCompatabilityBlockFilter
{
@Required
@DontObfuscate
@@ -38,7 +38,7 @@ public class IrisCompatabilityFilter
private final transient AtomicCache findData = new AtomicCache<>(true);
private final transient AtomicCache replaceData = new AtomicCache<>(true);
- public IrisCompatabilityFilter(String when, String supplement)
+ public IrisCompatabilityBlockFilter(String when, String supplement)
{
this(when, supplement, false);
}
@@ -53,8 +53,13 @@ public class IrisCompatabilityFilter
{
return replaceData.aquire(() ->
{
- BlockData b = B.getBlockData(supplement);
+ BlockData 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;
diff --git a/src/main/java/com/volmit/iris/object/IrisCompatabilityItemFilter.java b/src/main/java/com/volmit/iris/object/IrisCompatabilityItemFilter.java
new file mode 100644
index 000000000..0a2b4c102
--- /dev/null
+++ b/src/main/java/com/volmit/iris/object/IrisCompatabilityItemFilter.java
@@ -0,0 +1,62 @@
+package com.volmit.iris.object;
+
+import org.bukkit.Material;
+
+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.Required;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Desc("Find and replace object items for compatability")
+@Data
+public class IrisCompatabilityItemFilter
+{
+ @Required
+ @DontObfuscate
+ @Desc("When iris sees this block, and it's not reconized")
+ private String when = "";
+
+ @Required
+ @DontObfuscate
+ @Desc("Replace it with this block. Dont worry if this block is also not reconized, iris repeat this compat check.")
+ private String supplement = "";
+
+ private final transient AtomicCache findData = new AtomicCache<>(true);
+ private final transient AtomicCache replaceData = new AtomicCache<>(true);
+
+ public IrisCompatabilityItemFilter(String when, String supplement)
+ {
+ this.when = when;
+ this.supplement = supplement;
+ }
+
+ public Material getFind()
+ {
+ return findData.aquire(() -> B.getMaterial(when));
+ }
+
+ public Material getReplace()
+ {
+ return replaceData.aquire(() ->
+ {
+ Material b = B.getMaterialOrNull(supplement);
+
+ if(b == null)
+ {
+ return null;
+ }
+
+ Iris.verbose("Compat: Using " + supplement + " in place of " + when + " since this server doesnt support '" + supplement + "'");
+
+ return b;
+ });
+ }
+}
diff --git a/src/main/java/com/volmit/iris/object/IrisDimension.java b/src/main/java/com/volmit/iris/object/IrisDimension.java
index 03109c5dc..f7902c91d 100644
--- a/src/main/java/com/volmit/iris/object/IrisDimension.java
+++ b/src/main/java/com/volmit/iris/object/IrisDimension.java
@@ -183,11 +183,6 @@ public class IrisDimension extends IrisRegistrant
@Desc("Use post processing for caves or not")
private boolean postProcessCaves = true;
- @ArrayType(min = 1, type = IrisCompatabilityFilter.class)
- @DontObfuscate
- @Desc("Compatability filters")
- private KList compatability = getDefaultCompatability();
-
@Required
@DontObfuscate
@Desc("The world environment")
@@ -330,146 +325,6 @@ public class IrisDimension extends IrisRegistrant
return getSky() != null;
}
- public static KList getDefaultCompatability()
- {
- KList filters = new KList<>();
-
- // Below 1.16
- 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("NETHER_FENCE", "LEGACY_NETHER_FENCE"));
- filters.add(new IrisCompatabilityFilter("CHAIN", "IRON_BARS"));
- filters.add(new IrisCompatabilityFilter("NETHERITE_BLOCK", "QUARTZ_BLOCK"));
- filters.add(new IrisCompatabilityFilter("BLACKSTONE", "COBBLESTONE"));
- filters.add(new IrisCompatabilityFilter("BASALT", "STONE"));
- filters.add(new IrisCompatabilityFilter("ANCIENT_DEBRIS", "NETHERRACK"));
- filters.add(new IrisCompatabilityFilter("NETHERRACK", "LEGACY_NETHERRACK"));
-
- // Below 1.15
- filters.add(new IrisCompatabilityFilter("HONEY_BLOCK", "OAK_LEAVES"));
- filters.add(new IrisCompatabilityFilter("BEEHIVE", "OAK_LEAVES"));
- filters.add(new IrisCompatabilityFilter("BEE_NEST", "OAK_LEAVES"));
-
- // Below 1.14
- 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("ANDESITE_WALL", "COBBLESTONE_WALL"));
- filters.add(new IrisCompatabilityFilter("SWEET_BERRY_BUSH", "GRASS"));
- filters.add(new IrisCompatabilityFilter("STONECUTTER", "CRAFTING_TABLE"));
- filters.add(new IrisCompatabilityFilter("SANDSTONE_STAIRS", "LEGACY_SANDSTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("SMOOTH_SANDSTONE_STAIRS", "LEGACY_SANDSTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("MOSSY_COBBLESTONE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("MOSSY_STONE_BRICK_STAIRS", "STONE_BRICK_STAIRS"));
- filters.add(new IrisCompatabilityFilter("POLISHED_GRANITE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("GRANITE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("POLISHED_DIORITE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("DIORITE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("POLISHED_ANDESITE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("ANDESITE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("STONE_STAIRS", "COBBLESTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("END_STONE_BRICK_STAIRS", "LEGACY_SANDSTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("NETHER_BRICK_STAIRS", "LEGACY_NETHER_BRICK_STAIRS"));
- filters.add(new IrisCompatabilityFilter("RED_NETHER_BRICK_STAIRS", "NETHER_BRICK_STAIRS"));
- filters.add(new IrisCompatabilityFilter("SMOOTH_QUARTZ_STAIRS", "LEGACY_QUARTZ_STAIRS"));
- filters.add(new IrisCompatabilityFilter("QUARTZ_STAIRS", "LEGACY_QUARTZ_STAIRS"));
- filters.add(new IrisCompatabilityFilter("RED_SANDSTONE_STAIRS", "LEGACY_RED_SANDSTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("SMOOTH_RED_SANDSTONE_STAIRS", "LEGACY_RED_SANDSTONE_STAIRS"));
- filters.add(new IrisCompatabilityFilter("STONE_SLAB", "SMOOTH_STONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("SMOKER", "FURNACE"));
- filters.add(new IrisCompatabilityFilter("SMITHING_TABLE", "CRAFTING_TABLE"));
- filters.add(new IrisCompatabilityFilter("END_STONE_BRICK_SLAB", "SANDSTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("RED_NETHER_BRICK_SLAB", "NETHER_BRICK_SLAB"));
- filters.add(new IrisCompatabilityFilter("SMOOTH_QUARTZ_SLAB", "QUARTZ_SLAB"));
- filters.add(new IrisCompatabilityFilter("CUT_SANDSTONE_SLAB", "SANDSTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("CUT_RED_SANDSTONE_SLAB", "RED_SANDSTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("SMOOTH_RED_SANDSTONE_SLAB", "RED_SANDSTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("SMOOTH_SANDSTONE_SLAB", "SANDSTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("MOSSY_COBBLESTONE_SLAB", "COBBLESTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("MOSSY_STONE_BRICK_SLAB", "STONE_BRICK_SLAB"));
- filters.add(new IrisCompatabilityFilter("STONE_SLAB", "SMOOTH_STONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("ANDESITE_SLAB", "COBBLESTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("ANDESITE_SLAB", "COBBLESTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("DIORITE_SLAB", "COBBLESTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("GRANITE_SLAB", "COBBLESTONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("POLISHED_ANDESITE_SLAB", "SMOOTH_STONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("POLISHED_DIORITE_SLAB", "SMOOTH_STONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("POLISHED_GRANITE_SLAB", "SMOOTH_STONE_SLAB"));
- filters.add(new IrisCompatabilityFilter("WARPED_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("WARPED_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("SPRUCE_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("SPRUCE_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("OAK_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("OAK_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("JUNGLE_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("JUNGLE_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("DARK_OAK_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("DARK_OAK_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("CRIMSON_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("CRIMSON_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("BIRCH_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("BIRCH_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("ACACIA_WALL_SIGN", "LEGACY_WALL_SIGN"));
- filters.add(new IrisCompatabilityFilter("ACACIA_SIGN", "LEGACY_SIGN_POST"));
- filters.add(new IrisCompatabilityFilter("SCAFFOLDING", "BIRCH_FENCE"));
- filters.add(new IrisCompatabilityFilter("LOOM", "LOOM"));
- filters.add(new IrisCompatabilityFilter("LECTERN", "BOOKSHELF"));
- filters.add(new IrisCompatabilityFilter("LANTERN", "REDSTONE_LAMP"));
- filters.add(new IrisCompatabilityFilter("JIGSAW", "AIR"));
- filters.add(new IrisCompatabilityFilter("GRINDSTONE", "COBBLESTONE"));
- filters.add(new IrisCompatabilityFilter("FLETCHING_TABLE", "CRAFTING_TABLE"));
- filters.add(new IrisCompatabilityFilter("COMPOSTER", "CHEST"));
- filters.add(new IrisCompatabilityFilter("CARTOGRAPHY_TABLE", "CRAFTING_TABLE"));
- filters.add(new IrisCompatabilityFilter("CAMPFIRE", "DARK_OAK_SLAB"));
- filters.add(new IrisCompatabilityFilter("BLAST_FURNACE", "FURNACE"));
- filters.add(new IrisCompatabilityFilter("BELL", "REDSTONE_LAMP"));
- filters.add(new IrisCompatabilityFilter("minecraft:barrel[facing=south]", "minecraft:hay_bale[axis=z]", true));
- filters.add(new IrisCompatabilityFilter("minecraft:barrel[facing=north]", "minecraft:hay_bale[axis=z]", true));
- filters.add(new IrisCompatabilityFilter("minecraft:barrel[facing=east]", "minecraft:hay_bale[axis=x]", true));
- filters.add(new IrisCompatabilityFilter("minecraft:barrel[facing=west]", "minecraft:hay_bale[axis=x]", true));
- filters.add(new IrisCompatabilityFilter("minecraft:barrel[facing=up]", "minecraft:hay_bale[axis=y]", true));
- filters.add(new IrisCompatabilityFilter("minecraft:barrel[facing=down]", "minecraft:hay_bale[axis=y]", true));
- filters.add(new IrisCompatabilityFilter("BAMBOO", "BIRCH_FENCE"));
- filters.add(new IrisCompatabilityFilter("BAMBOO_SAPLING", "BIRCH_SAPLING"));
- filters.add(new IrisCompatabilityFilter("POTTED_BAMBOO", "POTTED_BIRCH_SAPLING"));
-
- return filters;
- }
-
public CNG getCoordFracture(RNG rng, int signature)
{
return coordFracture.aquire(() ->
@@ -627,17 +482,14 @@ public class IrisDimension extends IrisRegistrant
});
}
- public BlockData resolve(String bd)
+ public BlockData resolveBlock(String bd)
{
- for(IrisCompatabilityFilter i : getCompatability())
- {
- if(i.getWhen().equalsIgnoreCase(bd))
- {
- return i.getReplace();
- }
- }
+ return Iris.compat.getBlock(bd);
+ }
- return null;
+ public Material resolveItem(String bd)
+ {
+ return Iris.compat.getItem(bd);
}
public IrisGeneratorStyle getBiomeStyle(InferredType type)
diff --git a/src/main/java/com/volmit/iris/util/B.java b/src/main/java/com/volmit/iris/util/B.java
index 2bef56083..1205fd294 100644
--- a/src/main/java/com/volmit/iris/util/B.java
+++ b/src/main/java/com/volmit/iris/util/B.java
@@ -23,6 +23,7 @@ public class B
private static final IrisDimension defaultCompat = new IrisDimension();
private static final KMap solid = new KMap<>();
private static final KMap types = new KMap<>();
+ private static final KMap typesb = new KMap<>();
private static IrisLock lock = new IrisLock("Typelock");
public static BlockData get(String bd)
@@ -31,6 +32,30 @@ public class B
}
public static Material getMaterial(String bdx)
+ {
+ String bd = bdx.trim().toUpperCase();
+ return typesb.compute(bd, (k, v) ->
+ {
+ if(k != null && v != null)
+ {
+ return v;
+ }
+
+ try
+ {
+ return Material.valueOf(k);
+ }
+
+ catch(Throwable e)
+ {
+
+ }
+
+ return defaultCompat.resolveItem(bdx);
+ });
+ }
+
+ public static Material getMaterialOrNull(String bdx)
{
String bd = bdx.trim().toUpperCase();
return types.compute(bd, (k, v) ->
@@ -134,7 +159,7 @@ public class B
if(bdx == null)
{
- bdx = resolver.resolve(bd);
+ bdx = resolver.resolveBlock(bd);
}
if(bdx == null)
@@ -162,6 +187,42 @@ public class B
return AIR;
}
+ public static BlockData parseBlockDataOrNull(String ix)
+ {
+ try
+ {
+ BlockData bx = Bukkit.createBlockData(ix);
+
+ if(bx != null)
+ {
+ return bx;
+ }
+ }
+
+ catch(Throwable e)
+ {
+
+ }
+
+ String i = ix.toUpperCase().trim();
+ i = i.equals("WOOL") ? "WHITE_WOOL" : i;
+ i = i.equals("CONCRETE") ? "WHITE_CONCRETE" : i;
+
+ try
+ {
+ Material m = Material.valueOf(i);
+
+ return m.createBlockData();
+ }
+
+ catch(Throwable e)
+ {
+
+ }
+
+ return null;
+ }
+
public static BlockData parseBlockData(String ix)
{
try