9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-25 10:09:14 +00:00

Compat lists

This commit is contained in:
Daniel Mills
2020-10-06 14:22:10 -04:00
parent 0a195e0c11
commit 4f7d659700
8 changed files with 522 additions and 164 deletions

View File

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

View File

@@ -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<IrisCompatabilityBlockFilter> blockFilters = new KList<>();
private KList<IrisCompatabilityItemFilter> itemFilters = new KList<>();
private transient KMap<String, BlockData> blockResolves = new KMap<>();
private transient KMap<String, Material> 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<IrisCompatabilityItemFilter> getDefaultItemCompatabilityFilters()
{
KList<IrisCompatabilityItemFilter> 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<IrisCompatabilityBlockFilter> getDefaultBlockCompatabilityFilters()
{
KList<IrisCompatabilityBlockFilter> 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;
}
}

View File

@@ -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<BlockData> findData = new AtomicCache<>(true);
private final transient AtomicCache<BlockData> 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;

View File

@@ -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<Material> findData = new AtomicCache<>(true);
private final transient AtomicCache<Material> 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;
});
}
}

View File

@@ -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<IrisCompatabilityFilter> compatability = getDefaultCompatability();
@Required
@DontObfuscate
@Desc("The world environment")
@@ -330,146 +325,6 @@ public class IrisDimension extends IrisRegistrant
return getSky() != null;
}
public static KList<IrisCompatabilityFilter> getDefaultCompatability()
{
KList<IrisCompatabilityFilter> 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)

View File

@@ -23,6 +23,7 @@ public class B
private static final IrisDimension defaultCompat = new IrisDimension();
private static final KMap<Material, Boolean> solid = new KMap<>();
private static final KMap<String, Material> types = new KMap<>();
private static final KMap<String, Material> typesb = new KMap<>();
private static 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