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