diff --git a/.github/ISSUE_TEMPLATE/report-a-bug.yml b/.github/ISSUE_TEMPLATE/report-a-bug.yml index 7c385ca3f33..44f51eac3c8 100644 --- a/.github/ISSUE_TEMPLATE/report-a-bug.yml +++ b/.github/ISSUE_TEMPLATE/report-a-bug.yml @@ -70,10 +70,13 @@ body: validations: required: true -- type: markdown +- type: textarea attributes: - value: | - In the text box below, you can attach any relevant screenshots, files and links to Timings/spark profiler reports. + label: Additional Information + description: | + In this box, you can attach any relevant screenshots, files and links to Timings/spark profiler reports. You can also include a link to a heapdump if necessary, but please make sure you don't include any private player data in the heapdump. If you suspect this issue is related to a prior issue/PR/commit, please mention it here. - + validations: + required: false + diff --git a/Essentials/build.gradle b/Essentials/build.gradle index 84b9e3bfc5e..f6b35b3686f 100644 --- a/Essentials/build.gradle +++ b/Essentials/build.gradle @@ -14,9 +14,9 @@ dependencies { implementation 'org.checkerframework:checker-qual:3.21.0' implementation 'nu.studer:java-ordered-properties:1.0.4' - implementation 'net.kyori:adventure-api:4.15.0' - implementation 'net.kyori:adventure-text-minimessage:4.15.0' - implementation 'net.kyori:adventure-platform-bukkit:4.3.2' + implementation 'net.kyori:adventure-api:4.17.0' + implementation 'net.kyori:adventure-text-minimessage:4.17.0' + implementation 'net.kyori:adventure-platform-bukkit:4.3.3' // Providers api project(':providers:BaseProviders') diff --git a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java index 1028c830087..6b1215c3bd0 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AlternativeCommandsHandler.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import java.util.stream.Collectors; import org.bukkit.command.Command; import org.bukkit.command.PluginIdentifiableCommand; import org.bukkit.plugin.Plugin; @@ -31,7 +32,7 @@ public final void addPlugin(final Plugin plugin) { if (plugin.getDescription().getMain().contains("com.earth2me.essentials") || plugin.getDescription().getMain().contains("net.essentialsx")) { return; } - for (final Map.Entry entry : getPluginCommands(plugin).entrySet()) { + for (final Map.Entry entry : getPluginCommands(plugin)) { final String[] commandSplit = entry.getKey().split(":", 2); final String commandName = commandSplit.length > 1 ? commandSplit[1] : entry.getKey(); final Command command = entry.getValue(); @@ -64,14 +65,23 @@ public final void addPlugin(final Plugin plugin) { } } - private Map getPluginCommands(Plugin plugin) { + private List> getPluginCommands(Plugin plugin) { final Map commands = new HashMap<>(); for (final Map.Entry entry : ess.getKnownCommandsProvider().getKnownCommands().entrySet()) { if (entry.getValue() instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) entry.getValue()).getPlugin().equals(plugin)) { commands.put(entry.getKey(), entry.getValue()); } } - return commands; + // Try to use non-namespaced commands first if we can, some Commands may not like being registered under a + // different label than their getName() returns, so avoid doing that when we can + return commands.entrySet().stream().sorted((o1, o2) -> { + if (o1.getKey().contains(":") && !o2.getKey().contains(":")) { + return 1; + } else if (!o1.getKey().contains(":") && o2.getKey().contains(":")) { + return -1; + } + return 0; + }).collect(Collectors.toList()); } public void removePlugin(final Plugin plugin) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java index a4f40daf774..fc98e97e175 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java @@ -7,7 +7,6 @@ import io.papermc.lib.PaperLib; import net.ess3.api.IEssentials; import net.ess3.api.IUser; -import net.ess3.api.InvalidWorldException; import net.ess3.api.TranslatableException; import net.ess3.api.events.UserWarpEvent; import net.ess3.api.events.teleport.PreTeleportEvent; @@ -424,7 +423,7 @@ public void warp(final IUser otherUser, String warp, final Trade chargeFor, fina final Location loc; try { loc = ess.getWarps().getWarp(warp); - } catch (final WarpNotFoundException | InvalidWorldException e) { + } catch (final WarpNotFoundException e) { future.completeExceptionally(e); return; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/ChargeException.java b/Essentials/src/main/java/com/earth2me/essentials/ChargeException.java index adba3669d25..a8bde32eccc 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ChargeException.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ChargeException.java @@ -1,11 +1,9 @@ package com.earth2me.essentials; -public class ChargeException extends Exception { - public ChargeException(final String message) { - super(message); - } +import net.ess3.api.TranslatableException; - public ChargeException(final String message, final Throwable throwable) { - super(message, throwable); +public class ChargeException extends TranslatableException { + public ChargeException(String tlKey, Object... args) { + super(tlKey, args); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/CommandSource.java b/Essentials/src/main/java/com/earth2me/essentials/CommandSource.java index 59a88a21b3d..ed8d5bdb68d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/CommandSource.java +++ b/Essentials/src/main/java/com/earth2me/essentials/CommandSource.java @@ -36,7 +36,9 @@ public void sendTl(final String tlKey, final Object... args) { } final String translation = tlLiteral(tlKey, args); - sendComponent(AdventureUtil.miniMessage().deserialize(translation)); + if (!translation.isEmpty()) { + sendComponent(AdventureUtil.miniMessage().deserialize(translation)); + } } public String tl(final String tlKey, final Object... args) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/Console.java b/Essentials/src/main/java/com/earth2me/essentials/Console.java index 9dacde649ff..6414f3cefc5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Console.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Console.java @@ -69,6 +69,9 @@ public void sendMessage(final String message) { @Override public void sendTl(String tlKey, Object... args) { final String translation = tlLiteral(tlKey, args); + if (translation.isEmpty()) { + return; + } final Audience consoleAudience = ((Essentials) ess).getBukkitAudience().sender(getCommandSender()); final Component component = AdventureUtil.miniMessage() diff --git a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java index 542dca31182..6464258f271 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import com.earth2me.essentials.utils.RegistryUtil; import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; @@ -15,33 +16,43 @@ public final class Enchantments { private static boolean isFlat; static { - ENCHANTMENTS.put("alldamage", Enchantment.DAMAGE_ALL); - ALIASENCHANTMENTS.put("alldmg", Enchantment.DAMAGE_ALL); - ENCHANTMENTS.put("sharpness", Enchantment.DAMAGE_ALL); - ALIASENCHANTMENTS.put("sharp", Enchantment.DAMAGE_ALL); - ALIASENCHANTMENTS.put("dal", Enchantment.DAMAGE_ALL); - - ENCHANTMENTS.put("ardmg", Enchantment.DAMAGE_ARTHROPODS); - ENCHANTMENTS.put("baneofarthropods", Enchantment.DAMAGE_ARTHROPODS); - ALIASENCHANTMENTS.put("baneofarthropod", Enchantment.DAMAGE_ARTHROPODS); - ALIASENCHANTMENTS.put("arthropod", Enchantment.DAMAGE_ARTHROPODS); - ALIASENCHANTMENTS.put("dar", Enchantment.DAMAGE_ARTHROPODS); - - ENCHANTMENTS.put("undeaddamage", Enchantment.DAMAGE_UNDEAD); - ENCHANTMENTS.put("smite", Enchantment.DAMAGE_UNDEAD); - ALIASENCHANTMENTS.put("du", Enchantment.DAMAGE_UNDEAD); - - ENCHANTMENTS.put("digspeed", Enchantment.DIG_SPEED); - ENCHANTMENTS.put("efficiency", Enchantment.DIG_SPEED); - ALIASENCHANTMENTS.put("minespeed", Enchantment.DIG_SPEED); - ALIASENCHANTMENTS.put("cutspeed", Enchantment.DIG_SPEED); - ALIASENCHANTMENTS.put("ds", Enchantment.DIG_SPEED); - ALIASENCHANTMENTS.put("eff", Enchantment.DIG_SPEED); - - ENCHANTMENTS.put("durability", Enchantment.DURABILITY); - ALIASENCHANTMENTS.put("dura", Enchantment.DURABILITY); - ENCHANTMENTS.put("unbreaking", Enchantment.DURABILITY); - ALIASENCHANTMENTS.put("d", Enchantment.DURABILITY); + final Enchantment SHARPNESS = RegistryUtil.valueOf(Enchantment.class, "DAMAGE_ALL", "SHARPNESS"); + + ENCHANTMENTS.put("alldamage", SHARPNESS); + ALIASENCHANTMENTS.put("alldmg", SHARPNESS); + ENCHANTMENTS.put("sharpness", SHARPNESS); + ALIASENCHANTMENTS.put("sharp", SHARPNESS); + ALIASENCHANTMENTS.put("dal", SHARPNESS); + + final Enchantment BANE_OF_ARTHROPODS = RegistryUtil.valueOf(Enchantment.class, "DAMAGE_ARTHROPODS", "BANE_OF_ARTHROPODS"); + + ENCHANTMENTS.put("ardmg", BANE_OF_ARTHROPODS); + ENCHANTMENTS.put("baneofarthropods", BANE_OF_ARTHROPODS); + ALIASENCHANTMENTS.put("baneofarthropod", BANE_OF_ARTHROPODS); + ALIASENCHANTMENTS.put("arthropod", BANE_OF_ARTHROPODS); + ALIASENCHANTMENTS.put("dar", BANE_OF_ARTHROPODS); + + final Enchantment SMITE = RegistryUtil.valueOf(Enchantment.class, "DAMAGE_UNDEAD", "SMITE"); + + ENCHANTMENTS.put("undeaddamage", SMITE); + ENCHANTMENTS.put("smite", SMITE); + ALIASENCHANTMENTS.put("du", SMITE); + + final Enchantment EFFICIENCY = RegistryUtil.valueOf(Enchantment.class, "DIG_SPEED", "EFFICIENCY"); + + ENCHANTMENTS.put("digspeed", EFFICIENCY); + ENCHANTMENTS.put("efficiency", EFFICIENCY); + ALIASENCHANTMENTS.put("minespeed", EFFICIENCY); + ALIASENCHANTMENTS.put("cutspeed", EFFICIENCY); + ALIASENCHANTMENTS.put("ds", EFFICIENCY); + ALIASENCHANTMENTS.put("eff", EFFICIENCY); + + final Enchantment UNBREAKING = RegistryUtil.valueOf(Enchantment.class, "DURABILITY", "UNBREAKING"); + + ENCHANTMENTS.put("durability", UNBREAKING); + ALIASENCHANTMENTS.put("dura", UNBREAKING); + ENCHANTMENTS.put("unbreaking", UNBREAKING); + ALIASENCHANTMENTS.put("d", UNBREAKING); ENCHANTMENTS.put("thorns", Enchantment.THORNS); ENCHANTMENTS.put("highcrit", Enchantment.THORNS); @@ -59,106 +70,127 @@ public final class Enchantments { ALIASENCHANTMENTS.put("kback", Enchantment.KNOCKBACK); ALIASENCHANTMENTS.put("kb", Enchantment.KNOCKBACK); ALIASENCHANTMENTS.put("k", Enchantment.KNOCKBACK); - - ALIASENCHANTMENTS.put("blockslootbonus", Enchantment.LOOT_BONUS_BLOCKS); - ENCHANTMENTS.put("fortune", Enchantment.LOOT_BONUS_BLOCKS); - ALIASENCHANTMENTS.put("fort", Enchantment.LOOT_BONUS_BLOCKS); - ALIASENCHANTMENTS.put("lbb", Enchantment.LOOT_BONUS_BLOCKS); - - ALIASENCHANTMENTS.put("mobslootbonus", Enchantment.LOOT_BONUS_MOBS); - ENCHANTMENTS.put("mobloot", Enchantment.LOOT_BONUS_MOBS); - ENCHANTMENTS.put("looting", Enchantment.LOOT_BONUS_MOBS); - ALIASENCHANTMENTS.put("lbm", Enchantment.LOOT_BONUS_MOBS); - - ALIASENCHANTMENTS.put("oxygen", Enchantment.OXYGEN); - ENCHANTMENTS.put("respiration", Enchantment.OXYGEN); - ALIASENCHANTMENTS.put("breathing", Enchantment.OXYGEN); - ENCHANTMENTS.put("breath", Enchantment.OXYGEN); - ALIASENCHANTMENTS.put("o", Enchantment.OXYGEN); - - ENCHANTMENTS.put("protection", Enchantment.PROTECTION_ENVIRONMENTAL); - ALIASENCHANTMENTS.put("prot", Enchantment.PROTECTION_ENVIRONMENTAL); - ENCHANTMENTS.put("protect", Enchantment.PROTECTION_ENVIRONMENTAL); - ALIASENCHANTMENTS.put("p", Enchantment.PROTECTION_ENVIRONMENTAL); - - ALIASENCHANTMENTS.put("explosionsprotection", Enchantment.PROTECTION_EXPLOSIONS); - ALIASENCHANTMENTS.put("explosionprotection", Enchantment.PROTECTION_EXPLOSIONS); - ALIASENCHANTMENTS.put("expprot", Enchantment.PROTECTION_EXPLOSIONS); - ALIASENCHANTMENTS.put("blastprotection", Enchantment.PROTECTION_EXPLOSIONS); - ALIASENCHANTMENTS.put("bprotection", Enchantment.PROTECTION_EXPLOSIONS); - ALIASENCHANTMENTS.put("bprotect", Enchantment.PROTECTION_EXPLOSIONS); - ENCHANTMENTS.put("blastprotect", Enchantment.PROTECTION_EXPLOSIONS); - ALIASENCHANTMENTS.put("pe", Enchantment.PROTECTION_EXPLOSIONS); - - ALIASENCHANTMENTS.put("fallprotection", Enchantment.PROTECTION_FALL); - ENCHANTMENTS.put("fallprot", Enchantment.PROTECTION_FALL); - ENCHANTMENTS.put("featherfall", Enchantment.PROTECTION_FALL); - ALIASENCHANTMENTS.put("featherfalling", Enchantment.PROTECTION_FALL); - ALIASENCHANTMENTS.put("pfa", Enchantment.PROTECTION_FALL); - - ALIASENCHANTMENTS.put("fireprotection", Enchantment.PROTECTION_FIRE); - ALIASENCHANTMENTS.put("flameprotection", Enchantment.PROTECTION_FIRE); - ENCHANTMENTS.put("fireprotect", Enchantment.PROTECTION_FIRE); - ALIASENCHANTMENTS.put("flameprotect", Enchantment.PROTECTION_FIRE); - ENCHANTMENTS.put("fireprot", Enchantment.PROTECTION_FIRE); - ALIASENCHANTMENTS.put("flameprot", Enchantment.PROTECTION_FIRE); - ALIASENCHANTMENTS.put("pf", Enchantment.PROTECTION_FIRE); - - ENCHANTMENTS.put("projectileprotection", Enchantment.PROTECTION_PROJECTILE); - ENCHANTMENTS.put("projprot", Enchantment.PROTECTION_PROJECTILE); - ALIASENCHANTMENTS.put("pp", Enchantment.PROTECTION_PROJECTILE); + + final Enchantment FORTUNE = RegistryUtil.valueOf(Enchantment.class, "LOOT_BONUS_BLOCKS", "FORTUNE"); + + ALIASENCHANTMENTS.put("blockslootbonus", FORTUNE); + ENCHANTMENTS.put("fortune", FORTUNE); + ALIASENCHANTMENTS.put("fort", FORTUNE); + ALIASENCHANTMENTS.put("lbb", FORTUNE); + + final Enchantment LOOTING = RegistryUtil.valueOf(Enchantment.class, "LOOT_BONUS_MOBS", "LOOTING"); + + ALIASENCHANTMENTS.put("mobslootbonus", LOOTING); + ENCHANTMENTS.put("mobloot", LOOTING); + ENCHANTMENTS.put("looting", LOOTING); + ALIASENCHANTMENTS.put("lbm", LOOTING); + + final Enchantment RESPIRATION = RegistryUtil.valueOf(Enchantment.class, "OXYGEN", "RESPIRATION"); + + ALIASENCHANTMENTS.put("oxygen", RESPIRATION); + ENCHANTMENTS.put("respiration", RESPIRATION); + ALIASENCHANTMENTS.put("breathing", RESPIRATION); + ENCHANTMENTS.put("breath", RESPIRATION); + ALIASENCHANTMENTS.put("o", RESPIRATION); + + final Enchantment PROTECTION = RegistryUtil.valueOf(Enchantment.class, "PROTECTION_ENVIRONMENTAL", "PROTECTION"); + + ENCHANTMENTS.put("protection", PROTECTION); + ALIASENCHANTMENTS.put("prot", PROTECTION); + ENCHANTMENTS.put("protect", PROTECTION); + ALIASENCHANTMENTS.put("p", PROTECTION); + + final Enchantment BLAST_PROTECTION = RegistryUtil.valueOf(Enchantment.class, "PROTECTION_EXPLOSIONS", "BLAST_PROTECTION"); + + ALIASENCHANTMENTS.put("explosionsprotection", BLAST_PROTECTION); + ALIASENCHANTMENTS.put("explosionprotection", BLAST_PROTECTION); + ALIASENCHANTMENTS.put("expprot", BLAST_PROTECTION); + ALIASENCHANTMENTS.put("blastprotection", BLAST_PROTECTION); + ALIASENCHANTMENTS.put("bprotection", BLAST_PROTECTION); + ALIASENCHANTMENTS.put("bprotect", BLAST_PROTECTION); + ENCHANTMENTS.put("blastprotect", BLAST_PROTECTION); + ALIASENCHANTMENTS.put("pe", BLAST_PROTECTION); + + final Enchantment FEATHER_FALLING = RegistryUtil.valueOf(Enchantment.class, "PROTECTION_FALL", "FEATHER_FALLING"); + + ALIASENCHANTMENTS.put("fallprotection", FEATHER_FALLING); + ENCHANTMENTS.put("fallprot", FEATHER_FALLING); + ENCHANTMENTS.put("featherfall", FEATHER_FALLING); + ALIASENCHANTMENTS.put("featherfalling", FEATHER_FALLING); + ALIASENCHANTMENTS.put("pfa", FEATHER_FALLING); + + final Enchantment FIRE_PROTECTION = RegistryUtil.valueOf(Enchantment.class, "PROTECTION_FIRE", "FIRE_PROTECTION"); + + ALIASENCHANTMENTS.put("fireprotection", FIRE_PROTECTION); + ALIASENCHANTMENTS.put("flameprotection", FIRE_PROTECTION); + ENCHANTMENTS.put("fireprotect", FIRE_PROTECTION); + ALIASENCHANTMENTS.put("flameprotect", FIRE_PROTECTION); + ENCHANTMENTS.put("fireprot", FIRE_PROTECTION); + ALIASENCHANTMENTS.put("flameprot", FIRE_PROTECTION); + ALIASENCHANTMENTS.put("pf", FIRE_PROTECTION); + + final Enchantment PROJECTILE_PROTECTION = RegistryUtil.valueOf(Enchantment.class, "PROTECTION_PROJECTILE", "PROJECTILE_PROTECTION"); + + ENCHANTMENTS.put("projectileprotection", PROJECTILE_PROTECTION); + ENCHANTMENTS.put("projprot", PROJECTILE_PROTECTION); + ALIASENCHANTMENTS.put("pp", PROJECTILE_PROTECTION); ENCHANTMENTS.put("silktouch", Enchantment.SILK_TOUCH); ALIASENCHANTMENTS.put("softtouch", Enchantment.SILK_TOUCH); ALIASENCHANTMENTS.put("st", Enchantment.SILK_TOUCH); - - ENCHANTMENTS.put("waterworker", Enchantment.WATER_WORKER); - ENCHANTMENTS.put("aquaaffinity", Enchantment.WATER_WORKER); - ALIASENCHANTMENTS.put("watermine", Enchantment.WATER_WORKER); - ALIASENCHANTMENTS.put("ww", Enchantment.WATER_WORKER); - - ALIASENCHANTMENTS.put("firearrow", Enchantment.ARROW_FIRE); - ENCHANTMENTS.put("flame", Enchantment.ARROW_FIRE); - ENCHANTMENTS.put("flamearrow", Enchantment.ARROW_FIRE); - ALIASENCHANTMENTS.put("af", Enchantment.ARROW_FIRE); - - ENCHANTMENTS.put("arrowdamage", Enchantment.ARROW_DAMAGE); - ENCHANTMENTS.put("power", Enchantment.ARROW_DAMAGE); - ALIASENCHANTMENTS.put("arrowpower", Enchantment.ARROW_DAMAGE); - ALIASENCHANTMENTS.put("ad", Enchantment.ARROW_DAMAGE); - - ENCHANTMENTS.put("arrowknockback", Enchantment.ARROW_KNOCKBACK); - ALIASENCHANTMENTS.put("arrowkb", Enchantment.ARROW_KNOCKBACK); - ENCHANTMENTS.put("punch", Enchantment.ARROW_KNOCKBACK); - ALIASENCHANTMENTS.put("arrowpunch", Enchantment.ARROW_KNOCKBACK); - ALIASENCHANTMENTS.put("ak", Enchantment.ARROW_KNOCKBACK); - - ALIASENCHANTMENTS.put("infinitearrows", Enchantment.ARROW_INFINITE); - ENCHANTMENTS.put("infarrows", Enchantment.ARROW_INFINITE); - ENCHANTMENTS.put("infinity", Enchantment.ARROW_INFINITE); - ALIASENCHANTMENTS.put("infinite", Enchantment.ARROW_INFINITE); - ALIASENCHANTMENTS.put("unlimited", Enchantment.ARROW_INFINITE); - ALIASENCHANTMENTS.put("unlimitedarrows", Enchantment.ARROW_INFINITE); - ALIASENCHANTMENTS.put("ai", Enchantment.ARROW_INFINITE); - - ENCHANTMENTS.put("luck", Enchantment.LUCK); - ALIASENCHANTMENTS.put("luckofsea", Enchantment.LUCK); - ALIASENCHANTMENTS.put("luckofseas", Enchantment.LUCK); - ALIASENCHANTMENTS.put("rodluck", Enchantment.LUCK); + + final Enchantment AQUA_AFFINITY = RegistryUtil.valueOf(Enchantment.class, "WATER_WORKER", "AQUA_AFFINITY"); + + ENCHANTMENTS.put("waterworker", AQUA_AFFINITY); + ENCHANTMENTS.put("aquaaffinity", AQUA_AFFINITY); + ALIASENCHANTMENTS.put("watermine", AQUA_AFFINITY); + ALIASENCHANTMENTS.put("ww", AQUA_AFFINITY); + + final Enchantment FLAME = RegistryUtil.valueOf(Enchantment.class, "ARROW_FIRE", "FLAME"); + + ALIASENCHANTMENTS.put("firearrow", FLAME); + ENCHANTMENTS.put("flame", FLAME); + ENCHANTMENTS.put("flamearrow", FLAME); + ALIASENCHANTMENTS.put("af", FLAME); + + final Enchantment POWER = RegistryUtil.valueOf(Enchantment.class, "ARROW_DAMAGE", "POWER"); + + ENCHANTMENTS.put("arrowdamage", POWER); + ENCHANTMENTS.put("power", POWER); + ALIASENCHANTMENTS.put("arrowpower", POWER); + ALIASENCHANTMENTS.put("ad", POWER); + + final Enchantment PUNCH = RegistryUtil.valueOf(Enchantment.class, "ARROW_KNOCKBACK", "PUNCH"); + + ENCHANTMENTS.put("arrowknockback", PUNCH); + ALIASENCHANTMENTS.put("arrowkb", PUNCH); + ENCHANTMENTS.put("punch", PUNCH); + ALIASENCHANTMENTS.put("arrowpunch", PUNCH); + ALIASENCHANTMENTS.put("ak", PUNCH); + + final Enchantment INFINITY = RegistryUtil.valueOf(Enchantment.class, "ARROW_INFINITE", "INFINITY"); + + ALIASENCHANTMENTS.put("infinitearrows", INFINITY); + ENCHANTMENTS.put("infarrows", INFINITY); + ENCHANTMENTS.put("infinity", INFINITY); + ALIASENCHANTMENTS.put("infinite", INFINITY); + ALIASENCHANTMENTS.put("unlimited", INFINITY); + ALIASENCHANTMENTS.put("unlimitedarrows", INFINITY); + ALIASENCHANTMENTS.put("ai", INFINITY); + + final Enchantment LUCK_OF_THE_SEA = RegistryUtil.valueOf(Enchantment.class, "LUCK", "LUCK_OF_THE_SEA"); + + ENCHANTMENTS.put("luck", LUCK_OF_THE_SEA); + ALIASENCHANTMENTS.put("luckofsea", LUCK_OF_THE_SEA); + ALIASENCHANTMENTS.put("luckofseas", LUCK_OF_THE_SEA); + ALIASENCHANTMENTS.put("rodluck", LUCK_OF_THE_SEA); ENCHANTMENTS.put("lure", Enchantment.LURE); ALIASENCHANTMENTS.put("rodlure", Enchantment.LURE); - // 1.8 - try { - final Enchantment depthStrider = Enchantment.getByName("DEPTH_STRIDER"); - if (depthStrider != null) { - ENCHANTMENTS.put("depthstrider", depthStrider); - ALIASENCHANTMENTS.put("depth", depthStrider); - ALIASENCHANTMENTS.put("strider", depthStrider); - } - } catch (final IllegalArgumentException ignored) { - } + ENCHANTMENTS.put("depthstrider", Enchantment.DEPTH_STRIDER); + ALIASENCHANTMENTS.put("depth", Enchantment.DEPTH_STRIDER); + ALIASENCHANTMENTS.put("strider", Enchantment.DEPTH_STRIDER); // 1.9 try { @@ -271,6 +303,24 @@ public final class Enchantments { } catch (final IllegalArgumentException ignored) { } + try { // 1.21 + final Enchantment breach = Enchantment.getByName("BREACH"); + if (breach != null) { + ENCHANTMENTS.put("breach", breach); + } + final Enchantment density = Enchantment.getByName("DENSITY"); + if (density != null) { + ENCHANTMENTS.put("density", density); + } + final Enchantment windBurst = Enchantment.getByName("WIND_BURST"); + if (breach != null) { + ENCHANTMENTS.put("windburst", windBurst); + ALIASENCHANTMENTS.put("wind", windBurst); + ALIASENCHANTMENTS.put("burst", windBurst); + } + } catch (final IllegalArgumentException ignored) { + } + try { final Class namespacedKeyClass = Class.forName("org.bukkit.NamespacedKey"); final Class enchantmentClass = Class.forName("org.bukkit.enchantments.Enchantment"); @@ -284,6 +334,17 @@ public final class Enchantments { private Enchantments() { } + public static String getRealName(final Enchantment enchantment) { + if (enchantment == null) { + return null; + } + + if (isFlat) { // 1.13+ only + return enchantment.getKey().getKey(); + } + return enchantment.getName().toLowerCase(Locale.ENGLISH); + } + public static Enchantment getByName(final String name) { if (name == null || name.isEmpty()) { return null; diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 81a4ab8f32f..9e360f53841 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -59,10 +59,12 @@ import net.ess3.nms.refl.providers.ReflSpawnEggProvider; import net.ess3.nms.refl.providers.ReflSpawnerBlockProvider; import net.ess3.nms.refl.providers.ReflSyncCommandsProvider; +import net.ess3.provider.BannerDataProvider; import net.ess3.provider.BiomeKeyProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.DamageEventProvider; import net.ess3.provider.FormattedCommandAliasProvider; +import net.ess3.provider.InventoryViewProvider; import net.ess3.provider.ItemUnbreakableProvider; import net.ess3.provider.KnownCommandsProvider; import net.ess3.provider.MaterialTagProvider; @@ -78,14 +80,17 @@ import net.ess3.provider.SpawnerItemProvider; import net.ess3.provider.SyncCommandsProvider; import net.ess3.provider.WorldInfoProvider; +import net.ess3.provider.providers.BaseBannerDataProvider; +import net.ess3.provider.providers.BaseInventoryViewProvider; import net.ess3.provider.providers.BaseLoggerProvider; -import net.ess3.provider.providers.BasePotionDataProvider; import net.ess3.provider.providers.BlockMetaSpawnerItemProvider; import net.ess3.provider.providers.BukkitMaterialTagProvider; import net.ess3.provider.providers.BukkitSpawnerBlockProvider; import net.ess3.provider.providers.FixedHeightWorldInfoProvider; import net.ess3.provider.providers.FlatSpawnEggProvider; +import net.ess3.provider.providers.LegacyBannerDataProvider; import net.ess3.provider.providers.LegacyDamageEventProvider; +import net.ess3.provider.providers.LegacyInventoryViewProvider; import net.ess3.provider.providers.LegacyItemUnbreakableProvider; import net.ess3.provider.providers.LegacyPlayerLocaleProvider; import net.ess3.provider.providers.LegacyPotionMetaProvider; @@ -95,6 +100,7 @@ import net.ess3.provider.providers.ModernItemUnbreakableProvider; import net.ess3.provider.providers.ModernPersistentDataProvider; import net.ess3.provider.providers.ModernPlayerLocaleProvider; +import net.ess3.provider.providers.ModernPotionMetaProvider; import net.ess3.provider.providers.ModernSignDataProvider; import net.ess3.provider.providers.PaperBiomeKeyProvider; import net.ess3.provider.providers.PaperContainerProvider; @@ -103,6 +109,7 @@ import net.ess3.provider.providers.PaperRecipeBookListener; import net.ess3.provider.providers.PaperSerializationProvider; import net.ess3.provider.providers.PaperServerStateProvider; +import net.ess3.provider.providers.PrehistoricPotionMetaProvider; import net.essentialsx.api.v2.services.BalanceTop; import net.essentialsx.api.v2.services.mail.MailService; import net.kyori.adventure.platform.bukkit.BukkitAudiences; @@ -126,6 +133,7 @@ import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.inventory.InventoryView; import org.bukkit.plugin.InvalidDescriptionException; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; @@ -146,6 +154,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.MissingResourceException; import java.util.Set; import java.util.UUID; import java.util.function.Predicate; @@ -158,6 +167,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private static final Logger BUKKIT_LOGGER = Logger.getLogger("Essentials"); private static Logger LOGGER = null; + public static boolean TESTING = false; private final transient TNTExplodeListener tntListener = new TNTExplodeListener(); private final transient Set vanishedPlayers = new LinkedHashSet<>(); private final transient Map commandMap = new HashMap<>(); @@ -184,6 +194,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient SpawnerBlockProvider spawnerBlockProvider; private transient SpawnEggProvider spawnEggProvider; private transient PotionMetaProvider potionMetaProvider; + private transient BannerDataProvider bannerDataProvider; private transient ServerStateProvider serverStateProvider; private transient ContainerProvider containerProvider; private transient SerializationProvider serializationProvider; @@ -200,6 +211,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient SignDataProvider signDataProvider; private transient DamageEventProvider damageEventProvider; private transient BiomeKeyProvider biomeKeyProvider; + private transient InventoryViewProvider inventoryViewProvider; private transient Kits kits; private transient RandomTeleport randomTeleport; private transient UpdateChecker updateChecker; @@ -226,6 +238,7 @@ public ISettings getSettings() { } public void setupForTesting(final Server server) throws IOException, InvalidDescriptionException { + TESTING = true; LOGGER = new BaseLoggerProvider(this, BUKKIT_LOGGER); final File dataFolder = File.createTempFile("essentialstest", ""); if (!dataFolder.delete()) { @@ -345,6 +358,10 @@ public void onEnable() { upgrade.convertKits(); execTimer.mark("Kits"); + randomTeleport = new RandomTeleport(this); + confList.add(randomTeleport); + execTimer.mark("Init(RandomTeleport)"); + upgrade.afterSettings(); execTimer.mark("Upgrade3"); @@ -360,13 +377,6 @@ public void onEnable() { confList.add(itemDb); execTimer.mark("Init(ItemDB)"); - randomTeleport = new RandomTeleport(this); - if (randomTeleport.getPreCache()) { - randomTeleport.cacheRandomLocations(randomTeleport.getCenter(), randomTeleport.getMinRange(), randomTeleport.getMaxRange()); - } - confList.add(randomTeleport); - execTimer.mark("Init(RandomTeleport)"); - customItemResolver = new CustomItemResolver(this); try { itemDb.registerResolver(this, "custom_items", customItemResolver); @@ -403,10 +413,19 @@ public void onEnable() { } //Potion Meta Provider - if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) { + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_20_6_R01)) { + potionMetaProvider = new ModernPotionMetaProvider(); + } else if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) { + potionMetaProvider = new PrehistoricPotionMetaProvider(); + } else { potionMetaProvider = new LegacyPotionMetaProvider(); + } + + //Banner Meta Provider + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_20_6_R01)) { + bannerDataProvider = new BaseBannerDataProvider(); } else { - potionMetaProvider = new BasePotionDataProvider(); + bannerDataProvider = new LegacyBannerDataProvider(); } //Server State Provider @@ -488,6 +507,12 @@ public void onEnable() { damageEventProvider = new LegacyDamageEventProvider(); } + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_21_R01)) { + inventoryViewProvider = new BaseInventoryViewProvider(); + } else { + inventoryViewProvider = new LegacyInventoryViewProvider(); + } + if (PaperLib.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_19_4_R01)) { biomeKeyProvider = new PaperBiomeKeyProvider(); } @@ -785,7 +810,7 @@ public boolean onCommandEssentials(final CommandSender cSender, final Command co } catch (final Exception ex) { LOGGER.log(Level.SEVERE, ex.getMessage(), ex); if (cSender instanceof Player) { - cSender.sendMessage(tlLocale(I18n.getLocale(getPlayerLocaleProvider().getLocale((Player) cSender)), "internalError")); + getBukkitAudience().sender(cSender).sendMessage(AdventureUtil.miniMessage().deserialize(tlLocale(I18n.getLocale(getPlayerLocaleProvider().getLocale((Player) cSender)), "internalError"))); } else { cSender.sendMessage(tlLiteral("internalError")); } @@ -876,7 +901,11 @@ public boolean onCommandEssentials(final CommandSender cSender, final Command co } catch (final NotEnoughArgumentsException ex) { if (getSettings().isVerboseCommandUsages() && !cmd.getUsageStrings().isEmpty()) { sender.sendTl("commandHelpLine1", commandLabel); - sender.sendTl("commandHelpLine2", command.getDescription()); + String description = command.getDescription(); + try { + description = sender.tl(command.getName() + "CommandDescription"); + } catch (MissingResourceException ignored) {} + sender.sendTl("commandHelpLine2", description); sender.sendTl("commandHelpLine3"); for (Map.Entry usage : cmd.getUsageStrings().entrySet()) { sender.sendTl("commandHelpLineUsage", AdventureUtil.parsed(usage.getKey().replace("", commandLabel)), AdventureUtil.parsed(usage.getValue())); @@ -912,12 +941,14 @@ private boolean isEssentialsPlugin(Plugin plugin) { public void cleanupOpenInventories() { for (final User user : getOnlineUsers()) { if (user.isRecipeSee()) { - user.getBase().getOpenInventory().getTopInventory().clear(); - user.getBase().getOpenInventory().close(); + final InventoryView view = user.getBase().getOpenInventory(); + + inventoryViewProvider.getTopInventory(view).clear(); + inventoryViewProvider.close(view); user.setRecipeSee(false); } if (user.isInvSee() || user.isEnderSee()) { - user.getBase().getOpenInventory().close(); + inventoryViewProvider.close(user.getBase().getOpenInventory()); user.setInvSee(false); user.setEnderSee(false); } @@ -1200,7 +1231,7 @@ private int broadcastMessage(final IUser sender, final String permission, final @Override public void broadcastTl(final String tlKey, final Object... args) { - broadcastTl(null, null, true, tlKey, args); + broadcastTl(null, null, false, tlKey, args); } @Override @@ -1364,6 +1395,16 @@ public PotionMetaProvider getPotionMetaProvider() { return potionMetaProvider; } + @Override + public BannerDataProvider getBannerDataProvider() { + return bannerDataProvider; + } + + @Override + public InventoryViewProvider getInventoryViewProvider() { + return inventoryViewProvider; + } + @Override public CustomItemResolver getCustomItemResolver() { return customItemResolver; diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index a7bca0435e3..1c40363d2e5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -299,7 +299,7 @@ public void onPlayerQuit(final PlayerQuitEvent event) { } user.setLogoutLocation(); if (user.isRecipeSee()) { - user.getBase().getOpenInventory().getTopInventory().clear(); + ess.getInventoryViewProvider().getTopInventory(user.getBase().getOpenInventory()).clear(); } final ArrayList viewers = new ArrayList<>(user.getBase().getInventory().getViewers()); @@ -545,14 +545,14 @@ public void onPlayerLoginBanned(final PlayerLoginEvent event) { final Date banExpiry = banEntry.getExpiration(); if (banExpiry != null) { final String expiry = DateUtil.formatDateDiff(banExpiry.getTime()); - event.setKickMessage(tlLiteral("tempbanJoin", expiry, banEntry.getReason())); + event.setKickMessage(AdventureUtil.miniToLegacy(tlLiteral("tempbanJoin", expiry, banEntry.getReason()))); } else { - event.setKickMessage(tlLiteral("banJoin", banEntry.getReason())); + event.setKickMessage(AdventureUtil.miniToLegacy(tlLiteral("banJoin", banEntry.getReason()))); } } else { banEntry = ess.getServer().getBanList(BanList.Type.IP).getBanEntry(event.getAddress().getHostAddress()); if (banEntry != null) { - event.setKickMessage(tlLiteral("banIpJoin", banEntry.getReason())); + event.setKickMessage(AdventureUtil.miniToLegacy(tlLiteral("banIpJoin", banEntry.getReason()))); } } } @@ -609,7 +609,7 @@ public void onPlayerBucketEmpty(final PlayerBucketEmptyEvent event) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event) { - final String cmd = event.getMessage().toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH); + final String cmd = event.getMessage().split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH); final int argStartIndex = event.getMessage().indexOf(" "); final String args = argStartIndex == -1 ? "" // No arguments present : event.getMessage().substring(argStartIndex); // arguments start at argStartIndex; substring from there. @@ -632,7 +632,7 @@ public void onPlayerCommandPreprocess(final PlayerCommandPreprocessEvent event) public void handlePlayerCommandPreprocess(final PlayerCommandPreprocessEvent event, final String effectiveCommand) { final Player player = event.getPlayer(); - final String cmd = effectiveCommand.toLowerCase(Locale.ENGLISH).split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH); + final String cmd = effectiveCommand.split(" ")[0].replace("/", "").toLowerCase(Locale.ENGLISH); final PluginCommand pluginCommand = ess.getServer().getPluginCommand(cmd); if (ess.getSettings().getSocialSpyCommands().contains(cmd) || ess.getSettings().getSocialSpyCommands().contains("*")) { @@ -640,12 +640,13 @@ public void handlePlayerCommandPreprocess(final PlayerCommandPreprocessEvent eve || (!pluginCommand.getName().equals("msg") && !pluginCommand.getName().equals("r"))) { // /msg and /r are handled in SimpleMessageRecipient final User user = ess.getUser(player); if (!user.isAuthorized("essentials.chat.spy.exempt")) { + final String playerName = ess.getSettings().isSocialSpyDisplayNames() ? player.getDisplayName() : player.getName(); for (final User spyer : ess.getOnlineUsers()) { if (spyer.isSocialSpyEnabled() && !player.equals(spyer.getBase())) { final Component base = (user.isMuted() && ess.getSettings().getSocialSpyListenMutedPlayers()) ? spyer.tlComponent("socialSpyMutedPrefix") : spyer.tlComponent("socialSpyPrefix"); - spyer.sendComponent(base.append(AdventureUtil.legacyToAdventure(player.getDisplayName())).append(Component.text(": " + event.getMessage()))); + spyer.sendComponent(base.append(AdventureUtil.legacyToAdventure(playerName)).append(Component.text(": " + event.getMessage()))); } } } @@ -896,14 +897,14 @@ public void run() { @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInventoryClickEvent(final InventoryClickEvent event) { Player refreshPlayer = null; - final Inventory top = event.getView().getTopInventory(); + final Inventory top = ess.getInventoryViewProvider().getTopInventory(event.getView()); final InventoryType type = top.getType(); final Inventory clickedInventory; if (event.getRawSlot() < 0) { clickedInventory = null; } else { - clickedInventory = event.getRawSlot() < top.getSize() ? top : event.getView().getBottomInventory(); + clickedInventory = event.getRawSlot() < top.getSize() ? top : ess.getInventoryViewProvider().getBottomInventory(event.getView()); } final User user = ess.getUser((Player) event.getWhoClicked()); @@ -962,7 +963,7 @@ private boolean isPreventBindingHat(User user, PlayerInventory inventory) { @EventHandler(priority = EventPriority.MONITOR) public void onInventoryCloseEvent(final InventoryCloseEvent event) { Player refreshPlayer = null; - final Inventory top = event.getView().getTopInventory(); + final Inventory top = ess.getInventoryViewProvider().getTopInventory(event.getView()); final InventoryType type = top.getType(); if (type == InventoryType.PLAYER) { final User user = ess.getUser((Player) event.getPlayer()); @@ -976,7 +977,7 @@ public void onInventoryCloseEvent(final InventoryCloseEvent event) { final User user = ess.getUser((Player) event.getPlayer()); if (user.isRecipeSee()) { user.setRecipeSee(false); - event.getView().getTopInventory().clear(); + ess.getInventoryViewProvider().getTopInventory(event.getView()).clear(); refreshPlayer = user.getBase(); } } else if (type == InventoryType.CHEST && top.getSize() == 9) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java index 740f722a9ff..753421909a3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java @@ -3,6 +3,7 @@ import com.earth2me.essentials.config.ConfigurateUtil; import com.earth2me.essentials.config.EssentialsConfiguration; import com.earth2me.essentials.config.EssentialsUserConfiguration; +import com.earth2me.essentials.config.entities.LazyLocation; import com.earth2me.essentials.craftbukkit.BanLookup; import com.earth2me.essentials.userstorage.ModernUUIDCache; import com.earth2me.essentials.utils.AdventureUtil; @@ -156,6 +157,39 @@ public static void uuidFileConvert(final IEssentials ess, final Boolean ignoreUF ess.getLogger().info("To rerun the conversion type /essentials uuidconvert"); } + public void updateRandomTeleport() { + if (doneFile.getBoolean("updateRandomTeleport", false)) { + return; + } + + final EssentialsConfiguration config = ess.getRandomTeleport().getConfig(); + + final LazyLocation center = config.getLocation("center"); + final Location centerLoc = center != null ? center.location() : null; + if (center != null && centerLoc != null) { + final double minRange = config.getDouble("min-range", Double.MIN_VALUE); + final double maxRange = config.getDouble("max-range", Double.MIN_VALUE); + for (final World world : ess.getServer().getWorlds()) { + final String propPrefix = "locations." + world.getName() + "."; + config.setProperty(propPrefix + "center", centerLoc); + + if (minRange != Double.MIN_VALUE) { + config.setProperty(propPrefix + "min-range", minRange); + } + if (maxRange != Double.MIN_VALUE) { + config.setProperty(propPrefix + "max-range", maxRange); + } + } + } + config.removeProperty("center"); + + config.blockingSave(); + + doneFile.setProperty("updateRandomTeleport", true); + doneFile.save(); + ess.getLogger().info("Done converting random teleport config."); + } + public void convertMailList() { if (doneFile.getBoolean("updateUsersMailList", false)) { return; @@ -1068,5 +1102,6 @@ public void afterSettings() { convertStupidCamelCaseUserdataKeys(); convertMailList(); purgeBrokenNpcAccounts(); + updateRandomTeleport(); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 3b41f1c3060..598b1abe51e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -9,10 +9,12 @@ import com.earth2me.essentials.updatecheck.UpdateChecker; import com.earth2me.essentials.userstorage.IUserMap; import net.ess3.nms.refl.providers.ReflOnlineModeProvider; +import net.ess3.provider.BannerDataProvider; import net.ess3.provider.BiomeKeyProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.DamageEventProvider; import net.ess3.provider.FormattedCommandAliasProvider; +import net.ess3.provider.InventoryViewProvider; import net.ess3.provider.ItemUnbreakableProvider; import net.ess3.provider.KnownCommandsProvider; import net.ess3.provider.MaterialTagProvider; @@ -189,5 +191,9 @@ public interface IEssentials extends Plugin { BiomeKeyProvider getBiomeKeyProvider(); + BannerDataProvider getBannerDataProvider(); + + InventoryViewProvider getInventoryViewProvider(); + PluginCommand getPluginCommand(String cmd); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 8096f08d4b9..cbeee9328af 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -73,6 +73,8 @@ public interface ISettings extends IConf { boolean isSocialSpyMessages(); + boolean isSocialSpyDisplayNames(); + Set getMuteCommands(); @Deprecated @@ -104,6 +106,10 @@ public interface ISettings extends IConf { boolean getRespawnAtHome(); + String getRandomSpawnLocation(); + + String getRandomRespawnLocation(); + boolean isRespawnAtAnchor(); Set getMultipleHomes(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 14be12c1f5b..a317b2ff27a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -30,7 +30,6 @@ import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.potion.Potion; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -130,21 +129,30 @@ private void resetPotionMeta() { } public boolean canSpawn(final IEssentials ess) { - try { - ess.getServer().getUnsafe().modifyItemStack(stack.clone(), "{}"); - return true; - } catch (final NoSuchMethodError nsme) { - return true; - } catch (final Throwable npe) { - if (ess.getSettings().isDebug()) { - ess.getLogger().log(Level.INFO, "Itemstack is invalid", npe); + if (VersionUtil.PRE_FLATTENING) { + try { + ess.getServer().getUnsafe().modifyItemStack(stack.clone(), "{}"); + return true; + } catch (final NoSuchMethodError nsme) { + return true; + } catch (final Throwable npe) { + if (ess.getSettings().isDebug()) { + ess.getLogger().log(Level.INFO, "Itemstack is invalid", npe); + } + return false; } - return false; } + return stack.getType().isItem(); } public void parseStringMeta(final CommandSource sender, final boolean allowUnsafe, final String[] string, final int fromArg, final IEssentials ess) throws Exception { + final boolean nbtIsKill = VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_20_6_R01); + if (string[fromArg].startsWith("{") && hasMetaPermission(sender, "vanilla", false, true, ess)) { + if (nbtIsKill) { + throw new TranslatableException("noMetaNbtKill"); + } + try { stack = ess.getServer().getUnsafe().modifyItemStack(stack, Joiner.on(' ').join(Arrays.asList(string).subList(fromArg, string.length))); } catch (final NullPointerException npe) { @@ -156,6 +164,22 @@ public void parseStringMeta(final CommandSource sender, final boolean allowUnsaf } catch (final Throwable throwable) { throw new Exception(throwable.getMessage(), throwable); } + } else if (string[fromArg].startsWith("[") && hasMetaPermission(sender, "vanilla", false, true, ess)) { + if (!nbtIsKill) { + throw new TranslatableException("noMetaComponents"); + } + + try { + final String components = Joiner.on(' ').join(Arrays.asList(string).subList(fromArg, string.length)); + // modifyItemStack requires that the item namespaced key is prepended to the components for some reason + stack = ess.getServer().getUnsafe().modifyItemStack(stack, stack.getType().getKey() + components); + } catch (final NullPointerException npe) { + if (ess.getSettings().isDebug()) { + ess.getLogger().log(Level.INFO, "Itemstack is invalid", npe); + } + } catch (final Throwable throwable) { + throw new Exception(throwable.getMessage(), throwable); + } } else { for (int i = fromArg; i < string.length; i++) { addStringMeta(sender, allowUnsafe, string[i], ess); @@ -541,17 +565,7 @@ public void addPotionMeta(final CommandSource sender, final boolean allowShortNa } pmeta.addCustomEffect(pEffect, true); stack.setItemMeta(pmeta); - if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_9_R01)) { - if (isSplashPotion && stack.getType() == Material.POTION) { - stack.setType(Material.SPLASH_POTION); - } else if (!isSplashPotion && stack.getType() == Material.SPLASH_POTION) { - stack.setType(Material.POTION); - } - } else { - final Potion potion = Potion.fromDamage(stack.getDurability()); - potion.setSplash(isSplashPotion); - potion.apply(stack); - } + ess.getPotionMetaProvider().setSplashPotion(stack, isSplashPotion); resetPotionMeta(); } } @@ -562,7 +576,7 @@ private boolean parseEnchantmentStrings(final CommandSource sender, final boolea if (enchantment == null) { return false; } - if (hasMetaPermission(sender, "enchantments." + enchantment.getName().toLowerCase(Locale.ENGLISH), false, false, ess)) { + if (hasMetaPermission(sender, "enchantments." + Enchantments.getRealName(enchantment), false, false, ess)) { int level = -1; if (split.length > 1) { try { @@ -605,7 +619,7 @@ public void addEnchantment(final CommandSource sender, final boolean allowUnsafe } } } catch (final Exception ex) { - throw new Exception("Enchantment " + enchantment.getName() + ": " + ex.getMessage(), ex); + throw new Exception("Enchantment " + Enchantments.getRealName(enchantment) + ": " + ex.getMessage(), ex); } } @@ -615,7 +629,7 @@ public Enchantment getEnchantment(final User user, final String name) throws Exc return null; } - final String enchantmentName = enchantment.getName().toLowerCase(Locale.ENGLISH); + final String enchantmentName = Enchantments.getRealName(enchantment); if (!hasMetaPermission(user, "enchantments." + enchantmentName, true, false)) { throw new TranslatableException("enchantmentPerm", enchantmentName); @@ -633,16 +647,18 @@ public void addBannerMeta(final CommandSource sender, final boolean allowShortNa PatternType patternType = null; try { - patternType = PatternType.valueOf(split[0]); + //noinspection removal + patternType = PatternType.getByIdentifier(split[0]); } catch (final Exception ignored) { } final BannerMeta meta = (BannerMeta) stack.getItemMeta(); if (split[0].equalsIgnoreCase("basecolor")) { final Color color = Color.fromRGB(Integer.parseInt(split[1])); - meta.setBaseColor(DyeColor.getByColor(color)); + ess.getBannerDataProvider().setBaseColor(stack, DyeColor.getByColor(color)); } else if (patternType != null) { - final PatternType type = PatternType.valueOf(split[0]); + //noinspection removal + final PatternType type = PatternType.getByIdentifier(split[0]); final DyeColor color = DyeColor.getByColor(Color.fromRGB(Integer.parseInt(split[1]))); final org.bukkit.block.banner.Pattern pattern = new org.bukkit.block.banner.Pattern(color, type); meta.addPattern(pattern); @@ -658,7 +674,8 @@ public void addBannerMeta(final CommandSource sender, final boolean allowShortNa PatternType patternType = null; try { - patternType = PatternType.valueOf(split[0]); + //noinspection removal + patternType = PatternType.getByIdentifier(split[0]); } catch (final Exception ignored) { } @@ -669,7 +686,8 @@ public void addBannerMeta(final CommandSource sender, final boolean allowShortNa final Color color = Color.fromRGB(Integer.parseInt(split[1])); banner.setBaseColor(DyeColor.getByColor(color)); } else if (patternType != null) { - final PatternType type = PatternType.valueOf(split[0]); + //noinspection removal + final PatternType type = PatternType.getByIdentifier(split[0]); final DyeColor color = DyeColor.getByColor(Color.fromRGB(Integer.parseInt(split[1]))); final org.bukkit.block.banner.Pattern pattern = new org.bukkit.block.banner.Pattern(color, type); banner.addPattern(pattern); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Mob.java b/Essentials/src/main/java/com/earth2me/essentials/Mob.java index 249746c0f09..7883b69c7db 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Mob.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Mob.java @@ -42,22 +42,30 @@ public enum Mob { ENDERDRAGON("EnderDragon", Enemies.ENEMY, EntityType.ENDER_DRAGON), VILLAGER("Villager", Enemies.FRIENDLY, EntityType.VILLAGER), BLAZE("Blaze", Enemies.ENEMY, EntityType.BLAZE), - MUSHROOMCOW("MushroomCow", Enemies.FRIENDLY, EntityType.MUSHROOM_COW), + MUSHROOMCOW("MushroomCow", Enemies.FRIENDLY, MobCompat.MOOSHROOM), MAGMACUBE("MagmaCube", Enemies.ENEMY, EntityType.MAGMA_CUBE), - SNOWMAN("Snowman", Enemies.FRIENDLY, "", EntityType.SNOWMAN), + SNOWMAN("Snowman", Enemies.FRIENDLY, "", MobCompat.SNOW_GOLEM), OCELOT("Ocelot", Enemies.NEUTRAL, EntityType.OCELOT), IRONGOLEM("IronGolem", Enemies.NEUTRAL, EntityType.IRON_GOLEM), WITHER("Wither", Enemies.ENEMY, EntityType.WITHER), BAT("Bat", Enemies.FRIENDLY, EntityType.BAT), WITCH("Witch", Enemies.ENEMY, EntityType.WITCH), - BOAT("Boat", Enemies.NEUTRAL, EntityType.BOAT), + BOAT("Boat", Enemies.NEUTRAL, MobCompat.OAK_BOAT), + ACACIA_BOAT("AcaciaBoat", Enemies.NEUTRAL, "ACACIA_BOAT"), + DARK_OAK_BOAT("DarkOakBoat", Enemies.NEUTRAL, "DARK_OAK_BOAT"), + BIRCH_BOAT("BirchBoat", Enemies.NEUTRAL, "BIRCH_BOAT"), + JUNGLE_BOAT("JungleBoat", Enemies.NEUTRAL, "JUNGLE_BOAT"), + SPRUCE_BOAT("SpruceBoat", Enemies.NEUTRAL, "SPRUCE_BOAT"), + MANGROVE_BOAT("MangroveBoat", Enemies.NEUTRAL, "MANGROVE_BOAT"), + CHERRY_BOAT("CherryBoat", Enemies.NEUTRAL, "CHERRY_BOAT"), + BAMBOO_RAFT("BambooRaft", Enemies.NEUTRAL, "BAMBOO_RAFT"), MINECART("Minecart", Enemies.NEUTRAL, EntityType.MINECART), - MINECART_CHEST("ChestMinecart", Enemies.NEUTRAL, EntityType.MINECART_CHEST), - MINECART_FURNACE("FurnaceMinecart", Enemies.NEUTRAL, EntityType.MINECART_FURNACE), - MINECART_TNT("TNTMinecart", Enemies.NEUTRAL, EntityType.MINECART_TNT), - MINECART_HOPPER("HopperMinecart", Enemies.NEUTRAL, EntityType.MINECART_HOPPER), - MINECART_MOB_SPAWNER("SpawnerMinecart", Enemies.NEUTRAL, EntityType.MINECART_MOB_SPAWNER), - ENDERCRYSTAL("EnderCrystal", Enemies.NEUTRAL, EntityType.ENDER_CRYSTAL), + MINECART_CHEST("ChestMinecart", Enemies.NEUTRAL, MobCompat.CHEST_MINECART), + MINECART_FURNACE("FurnaceMinecart", Enemies.NEUTRAL, MobCompat.FURNACE_MINECART), + MINECART_TNT("TNTMinecart", Enemies.NEUTRAL, MobCompat.TNT_MINECART), + MINECART_HOPPER("HopperMinecart", Enemies.NEUTRAL, MobCompat.HOPPER_MINECART), + MINECART_MOB_SPAWNER("SpawnerMinecart", Enemies.NEUTRAL, MobCompat.SPAWNER_MINECART), + ENDERCRYSTAL("EnderCrystal", Enemies.NEUTRAL, MobCompat.END_CRYSTAL), EXPERIENCEORB("ExperienceOrb", Enemies.NEUTRAL, "EXPERIENCE_ORB"), ARMOR_STAND("ArmorStand", Enemies.NEUTRAL, "ARMOR_STAND"), ENDERMITE("Endermite", Enemies.ENEMY, "ENDERMITE"), @@ -112,6 +120,9 @@ public enum Mob { CHEST_BOAT("ChestBoat", Enemies.NEUTRAL, "CHEST_BOAT"), CAMEL("Camel", Enemies.FRIENDLY, "CAMEL"), SNIFFER("Sniffer", Enemies.FRIENDLY, "SNIFFER"), + ARMADILLO("Armadillo", Enemies.FRIENDLY, "ARMADILLO"), + BREEZE("Breeze", Enemies.ENEMY, "BREEZE"), + BOGGED("Bogged", Enemies.ENEMY, "BOGGED"), ; private static final Map hashMap = new HashMap<>(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java b/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java index e4992f54772..17cd5cb64d9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java @@ -1,6 +1,7 @@ package com.earth2me.essentials; import com.earth2me.essentials.utils.EnumUtil; +import com.earth2me.essentials.utils.RegistryUtil; import com.earth2me.essentials.utils.VersionUtil; import net.ess3.nms.refl.ReflUtil; import org.bukkit.Material; @@ -18,8 +19,10 @@ import org.bukkit.entity.Panda; import org.bukkit.entity.Parrot; import org.bukkit.entity.Player; +import org.bukkit.entity.Salmon; import org.bukkit.entity.TropicalFish; import org.bukkit.entity.Villager; +import org.bukkit.entity.Wolf; import org.bukkit.inventory.ItemStack; import java.lang.reflect.Method; @@ -46,10 +49,21 @@ public final class MobCompat { public static final EntityType GOAT = getEntityType("GOAT"); public static final EntityType FROG = getEntityType("FROG"); public static final EntityType CAMEL = getEntityType("CAMEL"); + public static final EntityType SALMON = getEntityType("SALMON"); // Constants for mobs that have changed since earlier versions public static final EntityType CAT = getEntityType("CAT", "OCELOT"); public static final EntityType ZOMBIFIED_PIGLIN = getEntityType("ZOMBIFIED_PIGLIN", "PIG_ZOMBIE"); + public static final EntityType MOOSHROOM = getEntityType("MOOSHROOM", "MUSHROOM_COW"); + public static final EntityType SNOW_GOLEM = getEntityType("SNOW_GOLEM", "SNOWMAN"); + public static final EntityType CHEST_MINECART = getEntityType("CHEST_MINECART", "MINECART_CHEST"); + public static final EntityType FURNACE_MINECART = getEntityType("FURNACE_MINECART", "MINECART_FURNACE"); + public static final EntityType TNT_MINECART = getEntityType("TNT_MINECART", "MINECART_TNT"); + public static final EntityType HOPPER_MINECART = getEntityType("HOPPER_MINECART", "MINECART_HOPPER"); + public static final EntityType SPAWNER_MINECART = getEntityType("SPAWNER_MINECART", "MINECART_MOB_SPAWNER"); + public static final EntityType END_CRYSTAL = getEntityType("END_CRYSTAL", "ENDER_CRYSTAL"); + public static final EntityType FIREWORK_ROCKET = getEntityType("FIREWORK_ROCKET", "FIREWORK"); + public static final EntityType OAK_BOAT = getEntityType("BOAT", "OAK_BOAT"); private MobCompat() { } @@ -183,7 +197,7 @@ public static void setFrogVariant(final Entity entity, final String variant) { } public static void setBoatVariant(final Entity entity, final BoatVariant variant) { - if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) { + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_21_3_R01) || VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) { return; } final Boat boat; @@ -196,6 +210,7 @@ public static void setBoatVariant(final Entity entity, final BoatVariant variant //noinspection deprecation boat.setWoodType(TreeSpecies.valueOf(variant.getTreeSpecies())); } else { + //noinspection deprecation boat.setBoatType(Boat.Type.valueOf(variant.getBoatType())); } } @@ -213,6 +228,28 @@ public static void setCamelSaddle(final Entity entity, final Player target) { } } + public static void setWolfVariant(final Entity entity, final String variant) { + if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_20_6_R01)) { + return; + } + + if (entity instanceof Wolf) { + final Wolf wolf = (Wolf) entity; + //noinspection DataFlowIssue + wolf.setVariant(RegistryUtil.valueOf(Wolf.Variant.class, variant)); + } + } + + public static void setSalmonSize(Entity spawned, String s) { + if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_21_3_R01)) { + return; + } + + if (spawned instanceof org.bukkit.entity.Salmon) { + ((Salmon) spawned).setVariant(Salmon.Variant.valueOf(s)); + } + } + public enum CatType { // These are (loosely) Mojang names for the cats SIAMESE("SIAMESE", "SIAMESE_CAT"), @@ -273,7 +310,7 @@ public enum VillagerProfession { } private Villager.Profession asEnum() { - return EnumUtil.valueOf(Villager.Profession.class, newProfession, oldProfession); + return RegistryUtil.valueOf(Villager.Profession.class, newProfession, oldProfession); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/MobData.java b/Essentials/src/main/java/com/earth2me/essentials/MobData.java index 581713d8240..e6a3b9e56e6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MobData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MobData.java @@ -157,8 +157,8 @@ public enum MobData { BLOCKFISH_TROPICAL_FISH("blockfish", MobCompat.TROPICAL_FISH, "tropicalfish:BLOCKFISH", true), BETTY_TROPICAL_FISH("betty", MobCompat.TROPICAL_FISH, "tropicalfish:BETTY", true), CLAYFISH_TROPICAL_FISH("clayfish", MobCompat.TROPICAL_FISH, "tropicalfish:CLAYFISH", true), - BROWN_MUSHROOM_COW("brown", EntityType.MUSHROOM_COW, "mooshroom:BROWN", true), - RED_MUSHROOM_COW("red", EntityType.MUSHROOM_COW, "mooshroom:RED", true), + BROWN_MUSHROOM_COW("brown", MobCompat.MOOSHROOM, "mooshroom:BROWN", true), + RED_MUSHROOM_COW("red", MobCompat.MOOSHROOM, "mooshroom:RED", true), AGGRESSIVE_PANDA_MAIN("aggressive", MobCompat.PANDA, "pandamain:AGGRESSIVE", true), LAZY_PANDA_MAIN("lazy", MobCompat.PANDA, "pandamain:LAZY", true), WORRIED_PANDA_MAIN("worried", MobCompat.PANDA, "pandamain:WORRIED", true), @@ -209,6 +209,18 @@ public enum MobData { OAK_BOAT("oak", Boat.class, MobCompat.BoatVariant.OAK, true), SPRUCE_BOAT("spruce", Boat.class, MobCompat.BoatVariant.SPRUCE, true), SADDLE_CAMEL("saddle", MobCompat.CAMEL, Data.CAMELSADDLE, true), + PALE_WOLF("pale", EntityType.WOLF, "wolf:PALE", true), + SPOTTED_WOLF("spotted", EntityType.WOLF, "wolf:PALE", true), + SNOWY_WOLF("snowy", EntityType.WOLF, "wolf:PALE", true), + BLACK_WOLF("black", EntityType.WOLF, "wolf:BLACK", true), + ASHEN_WOLF("ashen", EntityType.WOLF, "wolf:ASHEN", true), + RUSTY_WOLF("rusty", EntityType.WOLF, "wolf:RUSTY", true), + WOODS_WOLF("woods", EntityType.WOLF, "wolf:WOODS", true), + CHESTNUT_WOLF("chestnut", EntityType.WOLF, "wolf:CHESTNUT", true), + STRIPED_WOLF("striped", EntityType.WOLF, "wolf:STRIPED", true), + SMALL_SALMON("small", MobCompat.SALMON, "salmon:SMALL", true), + MEDIUM_SALMON("medium", MobCompat.SALMON, "salmon:MEDIUM", true), + LARGE_SALMON("large", MobCompat.SALMON, "salmon:LARGE", true), ; final private String nickname; @@ -424,6 +436,12 @@ public void setData(final Entity spawned, final Player target, final String rawD case "frog": MobCompat.setFrogVariant(spawned, split[1]); break; + case "wolf": + MobCompat.setWolfVariant(spawned, split[1]); + break; + case "salmon": + MobCompat.setSalmonSize(spawned, split[1]); + break; } } else { Essentials.getWrappedLogger().warning("Unknown mob data type: " + this.toString()); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Potions.java b/Essentials/src/main/java/com/earth2me/essentials/Potions.java index b174a03c12b..c6b8ae4ae01 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Potions.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Potions.java @@ -1,6 +1,7 @@ package com.earth2me.essentials; import com.earth2me.essentials.utils.NumberUtil; +import com.earth2me.essentials.utils.RegistryUtil; import org.bukkit.potion.PotionEffectType; import java.util.HashMap; @@ -21,50 +22,68 @@ public final class Potions { ALIASPOTIONS.put("sprint", PotionEffectType.SPEED); ALIASPOTIONS.put("swift", PotionEffectType.SPEED); - POTIONS.put("slowness", PotionEffectType.SLOW); - ALIASPOTIONS.put("slow", PotionEffectType.SLOW); - ALIASPOTIONS.put("sluggish", PotionEffectType.SLOW); + final PotionEffectType SLOWNESS = RegistryUtil.valueOf(PotionEffectType.class, "SLOW", "SLOWNESS"); - POTIONS.put("haste", PotionEffectType.FAST_DIGGING); - ALIASPOTIONS.put("superpick", PotionEffectType.FAST_DIGGING); - ALIASPOTIONS.put("quickmine", PotionEffectType.FAST_DIGGING); - ALIASPOTIONS.put("digspeed", PotionEffectType.FAST_DIGGING); - ALIASPOTIONS.put("digfast", PotionEffectType.FAST_DIGGING); - ALIASPOTIONS.put("sharp", PotionEffectType.FAST_DIGGING); + POTIONS.put("slowness", SLOWNESS); + ALIASPOTIONS.put("slow", SLOWNESS); + ALIASPOTIONS.put("sluggish", SLOWNESS); - POTIONS.put("fatigue", PotionEffectType.SLOW_DIGGING); - ALIASPOTIONS.put("slow", PotionEffectType.SLOW_DIGGING); - ALIASPOTIONS.put("dull", PotionEffectType.SLOW_DIGGING); + final PotionEffectType HASTE = RegistryUtil.valueOf(PotionEffectType.class, "FAST_DIGGING", "HASTE"); - POTIONS.put("strength", PotionEffectType.INCREASE_DAMAGE); - ALIASPOTIONS.put("strong", PotionEffectType.INCREASE_DAMAGE); - ALIASPOTIONS.put("bull", PotionEffectType.INCREASE_DAMAGE); - ALIASPOTIONS.put("attack", PotionEffectType.INCREASE_DAMAGE); + POTIONS.put("haste", HASTE); + ALIASPOTIONS.put("superpick", HASTE); + ALIASPOTIONS.put("quickmine", HASTE); + ALIASPOTIONS.put("digspeed", HASTE); + ALIASPOTIONS.put("digfast", HASTE); + ALIASPOTIONS.put("sharp", HASTE); - POTIONS.put("heal", PotionEffectType.HEAL); - ALIASPOTIONS.put("healthy", PotionEffectType.HEAL); - ALIASPOTIONS.put("instaheal", PotionEffectType.HEAL); + final PotionEffectType MINING_FATIGUE = RegistryUtil.valueOf(PotionEffectType.class, "SLOW_DIGGING", "MINING_FATIGUE"); - POTIONS.put("harm", PotionEffectType.HARM); - ALIASPOTIONS.put("harming", PotionEffectType.HARM); - ALIASPOTIONS.put("injure", PotionEffectType.HARM); - ALIASPOTIONS.put("damage", PotionEffectType.HARM); - ALIASPOTIONS.put("inflict", PotionEffectType.HARM); + POTIONS.put("fatigue", MINING_FATIGUE); + ALIASPOTIONS.put("slow", MINING_FATIGUE); + ALIASPOTIONS.put("dull", MINING_FATIGUE); - POTIONS.put("jump", PotionEffectType.JUMP); - ALIASPOTIONS.put("leap", PotionEffectType.JUMP); + final PotionEffectType STRENGTH = RegistryUtil.valueOf(PotionEffectType.class, "INCREASE_DAMAGE", "STRENGTH"); - POTIONS.put("nausea", PotionEffectType.CONFUSION); - ALIASPOTIONS.put("sick", PotionEffectType.CONFUSION); - ALIASPOTIONS.put("sickness", PotionEffectType.CONFUSION); - ALIASPOTIONS.put("confusion", PotionEffectType.CONFUSION); + POTIONS.put("strength", STRENGTH); + ALIASPOTIONS.put("strong", STRENGTH); + ALIASPOTIONS.put("bull", STRENGTH); + ALIASPOTIONS.put("attack", STRENGTH); + + final PotionEffectType INSTANT_HEALTH = RegistryUtil.valueOf(PotionEffectType.class, "HEAL", "INSTANT_HEALTH"); + + POTIONS.put("heal", INSTANT_HEALTH); + ALIASPOTIONS.put("healthy", INSTANT_HEALTH); + ALIASPOTIONS.put("instaheal", INSTANT_HEALTH); + + final PotionEffectType INSTANT_DAMAGE = RegistryUtil.valueOf(PotionEffectType.class, "HARM", "INSTANT_DAMAGE"); + + POTIONS.put("harm", INSTANT_DAMAGE); + ALIASPOTIONS.put("harming", INSTANT_DAMAGE); + ALIASPOTIONS.put("injure", INSTANT_DAMAGE); + ALIASPOTIONS.put("damage", INSTANT_DAMAGE); + ALIASPOTIONS.put("inflict", INSTANT_DAMAGE); + + final PotionEffectType JUMP_BOOST = RegistryUtil.valueOf(PotionEffectType.class, "JUMP", "JUMP_BOOST"); + + POTIONS.put("jump", JUMP_BOOST); + ALIASPOTIONS.put("leap", JUMP_BOOST); + + final PotionEffectType NAUSEA = RegistryUtil.valueOf(PotionEffectType.class, "CONFUSION", "NAUSEA"); + + POTIONS.put("nausea", NAUSEA); + ALIASPOTIONS.put("sick", NAUSEA); + ALIASPOTIONS.put("sickness", NAUSEA); + ALIASPOTIONS.put("confusion", NAUSEA); POTIONS.put("regeneration", PotionEffectType.REGENERATION); ALIASPOTIONS.put("regen", PotionEffectType.REGENERATION); - POTIONS.put("resistance", PotionEffectType.DAMAGE_RESISTANCE); - ALIASPOTIONS.put("dmgresist", PotionEffectType.DAMAGE_RESISTANCE); - ALIASPOTIONS.put("armor", PotionEffectType.DAMAGE_RESISTANCE); + final PotionEffectType RESISTANCE = RegistryUtil.valueOf(PotionEffectType.class, "DAMAGE_RESISTANCE", "RESISTANCE"); + + POTIONS.put("resistance", RESISTANCE); + ALIASPOTIONS.put("dmgresist", RESISTANCE); + ALIASPOTIONS.put("armor", RESISTANCE); POTIONS.put("fireresist", PotionEffectType.FIRE_RESISTANCE); ALIASPOTIONS.put("fireresistance", PotionEffectType.FIRE_RESISTANCE); @@ -125,6 +144,23 @@ public final class Potions { POTIONS.put("unluck", PotionEffectType.UNLUCK); } catch (final Throwable ignored) { } + + // 1.21 + try { + POTIONS.put("infested", PotionEffectType.INFESTED); + ALIASPOTIONS.put("silverfish", PotionEffectType.INFESTED); + + POTIONS.put("oozing", PotionEffectType.OOZING); + ALIASPOTIONS.put("ooze", PotionEffectType.OOZING); + + POTIONS.put("weaving", PotionEffectType.WEAVING); + ALIASPOTIONS.put("weave", PotionEffectType.WEAVING); + + POTIONS.put("windcharged", PotionEffectType.WIND_CHARGED); + ALIASPOTIONS.put("windcharge", PotionEffectType.WIND_CHARGED); + ALIASPOTIONS.put("wind", PotionEffectType.WIND_CHARGED); + } catch (final Throwable ignored) { + } } private Potions() { diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index b1b683ab6fe..1529fd74430 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -1,17 +1,22 @@ package com.earth2me.essentials; +import com.earth2me.essentials.config.ConfigurateUtil; import com.earth2me.essentials.config.EssentialsConfiguration; import com.earth2me.essentials.config.entities.LazyLocation; import com.earth2me.essentials.utils.LocationUtil; import com.earth2me.essentials.utils.VersionUtil; import io.papermc.lib.PaperLib; -import net.ess3.api.InvalidWorldException; import net.ess3.provider.BiomeKeyProvider; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Queue; import java.util.Random; import java.util.Set; @@ -23,58 +28,72 @@ public class RandomTeleport implements IConf { private static final int HIGHEST_BLOCK_Y_OFFSET = VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_15_R01) ? 1 : 0; private final IEssentials ess; private final EssentialsConfiguration config; - private final ConcurrentLinkedQueue cachedLocations = new ConcurrentLinkedQueue<>(); + private final Map> cachedLocations = new HashMap<>(); public RandomTeleport(final IEssentials essentials) { this.ess = essentials; config = new EssentialsConfiguration(new File(essentials.getDataFolder(), "tpr.yml"), "/tpr.yml", - "Configuration for the random teleport command.\nSome settings may be defaulted, and can be changed via the /settpr command in-game."); + "Configuration for the random teleport command.\nUse the /settpr command in-game to set random teleport locations."); reloadConfig(); } + public EssentialsConfiguration getConfig() { + return config; + } + @Override public void reloadConfig() { config.load(); cachedLocations.clear(); } - public Location getCenter() { - try { - final LazyLocation center = config.getLocation("center"); - if (center != null && center.location() != null) { - return center.location(); - } - } catch (final InvalidWorldException ignored) { + public boolean hasLocation(final String name) { + return config.hasProperty("locations." + name); + } + + public Location getCenter(final String name) { + final LazyLocation center = config.getLocation(locationKey(name, "center")); + if (center != null && center.location() != null) { + return center.location(); } - final Location center = ess.getServer().getWorlds().get(0).getWorldBorder().getCenter(); - center.setY(center.getWorld().getHighestBlockYAt(center) + HIGHEST_BLOCK_Y_OFFSET); - setCenter(center); - return center; + + final Location worldCenter = ess.getServer().getWorlds().get(0).getWorldBorder().getCenter(); + worldCenter.setY(worldCenter.getWorld().getHighestBlockYAt(worldCenter) + HIGHEST_BLOCK_Y_OFFSET); + setCenter(name, worldCenter); + return worldCenter; } - public void setCenter(final Location center) { - config.setProperty("center", center); + public void setCenter(final String name, final Location center) { + config.setProperty(locationKey(name, "center"), center); config.save(); } - public double getMinRange() { - return config.getDouble("min-range", 0d); + public double getMinRange(final String name) { + return config.getDouble(locationKey(name, "min-range"), 0d); } - public void setMinRange(final double minRange) { - config.setProperty("min-range", minRange); + public void setMinRange(final String name, final double minRange) { + config.setProperty(locationKey(name, "min-range"), minRange); config.save(); } - public double getMaxRange() { - return config.getDouble("max-range", getCenter().getWorld().getWorldBorder().getSize() / 2); + public double getMaxRange(final String name) { + return config.getDouble(locationKey(name, "max-range"), getCenter(name).getWorld().getWorldBorder().getSize() / 2); } - public void setMaxRange(final double maxRange) { - config.setProperty("max-range", maxRange); + public void setMaxRange(final String name, final double maxRange) { + config.setProperty(locationKey(name, "max-range"), maxRange); config.save(); } + public String getDefaultLocation() { + return config.getString("default-location", "{world}"); + } + + public boolean isPerLocationPermission() { + return config.getBoolean("per-location-permission", false); + } + public Set getExcludedBiomes() { final Set excludedBiomes = new HashSet<>(); for (final String key : config.getList("excluded-biomes", String.class)) { @@ -91,39 +110,48 @@ public int getCacheThreshold() { return config.getInt("cache-threshold", 10); } - public boolean getPreCache() { - return config.getBoolean("pre-cache", false); + public List listLocations() { + return new ArrayList<>(ConfigurateUtil.getKeys(config.getRootNode().node("locations"))); } - public Queue getCachedLocations() { - return cachedLocations; + public Queue getCachedLocations(final String name) { + this.cachedLocations.computeIfAbsent(name, x -> new ConcurrentLinkedQueue<>()); + return cachedLocations.get(name); } - // Get a random location; cached if possible. Otherwise on demand. - public CompletableFuture getRandomLocation(final Location center, final double minRange, final double maxRange) { - final int findAttempts = this.getFindAttempts(); - final Queue cachedLocations = this.getCachedLocations(); + // Get a named random teleport location; cached if possible, otherwise on demand. + public CompletableFuture getRandomLocation(final String name) { + final Queue cached = this.getCachedLocations(name); // Try to build up the cache if it is below the threshold - if (cachedLocations.size() < this.getCacheThreshold()) { - cacheRandomLocations(center, minRange, maxRange); + if (cached.size() < this.getCacheThreshold()) { + cacheRandomLocations(name); } final CompletableFuture future = new CompletableFuture<>(); // Return a random location immediately if one is available, otherwise try to find one now - if (cachedLocations.isEmpty()) { + if (cached.isEmpty()) { + final int findAttempts = this.getFindAttempts(); + final Location center = this.getCenter(name); + final double minRange = this.getMinRange(name); + final double maxRange = this.getMaxRange(name); attemptRandomLocation(findAttempts, center, minRange, maxRange).thenAccept(future::complete); } else { - future.complete(cachedLocations.poll()); + future.complete(cached.poll()); } return future; } - // Prompts caching random valid locations, up to a maximum number of attempts - public void cacheRandomLocations(final Location center, final double minRange, final double maxRange) { + // Get a random location with specific parameters (note: not cached). + public CompletableFuture getRandomLocation(final Location center, final double minRange, final double maxRange) { + return attemptRandomLocation(this.getFindAttempts(), center, minRange, maxRange); + } + + // Prompts caching random valid locations, up to a maximum number of attempts. + public void cacheRandomLocations(final String name) { ess.getServer().getScheduler().scheduleSyncDelayedTask(ess, () -> { for (int i = 0; i < this.getFindAttempts(); ++i) { - calculateRandomLocation(center, minRange, maxRange).thenAccept(location -> { + calculateRandomLocation(getCenter(name), getMinRange(name), getMaxRange(name)).thenAccept(location -> { if (isValidRandomLocation(location)) { - this.getCachedLocations().add(location); + this.getCachedLocations(name).add(location); } }); } @@ -188,14 +216,18 @@ private CompletableFuture calculateRandomLocation(final Location cente return future; } - // Returns an appropriate elevation for a given location in the nether, or -1 if none is found + // Returns an appropriate elevation for a given location in the nether, or MIN_VALUE if none is found private double getNetherYAt(final Location location) { - for (int y = 32; y < ess.getWorldInfoProvider().getMaxHeight(location.getWorld()); ++y) { - if (!LocationUtil.isBlockUnsafe(ess, location.getWorld(), location.getBlockX(), y, location.getBlockZ())) { + final World world = location.getWorld(); + for (int y = 32; y < ess.getWorldInfoProvider().getMaxHeight(world); ++y) { + if (Material.BEDROCK.equals(world.getBlockAt(location.getBlockX(), y, location.getBlockZ()).getType())) { + break; + } + if (!LocationUtil.isBlockUnsafe(ess, world, location.getBlockX(), y, location.getBlockZ())) { return y; } } - return -1; + return Double.MIN_VALUE; } private boolean isValidRandomLocation(final Location location) { @@ -226,6 +258,10 @@ private boolean isExcludedBiome(final Location location) { return excluded.contains(biomeKey); } + private String locationKey(final String name, final String key) { + return "locations." + name + "." + key; + } + public File getFile() { return config.getFile(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 5fe884f7ac2..15a4c6ef985 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -23,6 +23,7 @@ import org.bukkit.command.Command; import org.bukkit.event.EventPriority; import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; import org.spongepowered.configurate.CommentedConfigurationNode; import java.io.File; @@ -162,6 +163,16 @@ public boolean getRespawnAtHome() { return config.getBoolean("respawn-at-home", false); } + @Override + public String getRandomSpawnLocation() { + return config.getString("random-spawn-location", "none"); + } + + @Override + public String getRandomRespawnLocation() { + return config.getString("random-respawn-location", "none"); + } + @Override public boolean isRespawnAtAnchor() { return config.getBoolean("respawn-at-anchor", false); @@ -456,6 +467,11 @@ public boolean isSocialSpyMessages() { return config.getBoolean("socialspy-messages", true); } + @Override + public boolean isSocialSpyDisplayNames() { + return config.getBoolean("socialspy-uses-displaynames", true); + } + private Set _getMuteCommands() { final Set muteCommands = new HashSet<>(); if (config.isList("mute-commands")) { @@ -700,6 +716,18 @@ public void reloadConfig() { mapModified = true; } + if (reloadCount.get() < 2) { + // on startup: add plugins again in case they registered commands with the new API + // we need to schedule this task before any of the below tasks using _addAlternativeCommand. + ess.scheduleSyncDelayedTask(() -> { + for (final Plugin plugin : ess.getServer().getPluginManager().getPlugins()) { + if (plugin.isEnabled()) { + ess.getAlternativeCommandsHandler().addPlugin(plugin); + } + } + }); + } + for (final String command : disabledCommands) { final String effectiveAlias = command.toLowerCase(Locale.ENGLISH); final Command toDisable = ess.getPluginCommand(effectiveAlias); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Trade.java b/Essentials/src/main/java/com/earth2me/essentials/Trade.java index c1add6d9461..8cfebc433f2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Trade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Trade.java @@ -191,23 +191,23 @@ public void isAffordableFor(final IUser user, final CompletableFuture f } if (getMoney() != null && getMoney().signum() > 0 && !user.canAfford(getMoney())) { - future.completeExceptionally(new ChargeException(user.playerTl("notEnoughMoney", NumberUtil.displayCurrency(getMoney(), ess)))); + future.completeExceptionally(new ChargeException("notEnoughMoney", NumberUtil.displayCurrency(getMoney(), ess))); return; } if (getItemStack() != null && !Inventories.containsAtLeast(user.getBase(), itemStack, itemStack.getAmount())) { - future.completeExceptionally(new ChargeException(user.playerTl("missingItems", getItemStack().getAmount(), ess.getItemDb().name(getItemStack())))); + future.completeExceptionally(new ChargeException("missingItems", getItemStack().getAmount(), ess.getItemDb().name(getItemStack()))); return; } final BigDecimal money; if (command != null && !command.isEmpty() && (money = getCommandCost(user)).signum() > 0 && !user.canAfford(money)) { - future.completeExceptionally(new ChargeException(user.playerTl("notEnoughMoney", NumberUtil.displayCurrency(money, ess)))); + future.completeExceptionally(new ChargeException("notEnoughMoney", NumberUtil.displayCurrency(money, ess))); return; } if (exp != null && exp > 0 && SetExpFix.getTotalExperience(user.getBase()) < exp) { - future.completeExceptionally(new ChargeException(user.playerTl("notEnoughExperience"))); + future.completeExceptionally(new ChargeException("notEnoughExperience")); } } @@ -285,7 +285,7 @@ public void charge(final IUser user, final CompletableFuture future) { ess.getLogger().log(Level.INFO, "charging user " + user.getName() + " money " + getMoney().toPlainString()); } if (!user.canAfford(getMoney()) && getMoney().signum() > 0) { - future.completeExceptionally(new ChargeException(user.playerTl("notEnoughMoney", NumberUtil.displayCurrency(getMoney(), ess)))); + future.completeExceptionally(new ChargeException("notEnoughMoney", NumberUtil.displayCurrency(getMoney(), ess))); return; } user.takeMoney(getMoney()); @@ -295,7 +295,7 @@ public void charge(final IUser user, final CompletableFuture future) { ess.getLogger().log(Level.INFO, "charging user " + user.getName() + " itemstack " + getItemStack().toString()); } if (!Inventories.containsAtLeast(user.getBase(), getItemStack(), getItemStack().getAmount())) { - future.completeExceptionally(new ChargeException(user.playerTl("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " ")))); + future.completeExceptionally(new ChargeException("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase(Locale.ENGLISH).replace("_", " "))); return; } Inventories.removeItemAmount(user.getBase(), getItemStack(), getItemStack().getAmount()); @@ -304,7 +304,7 @@ public void charge(final IUser user, final CompletableFuture future) { if (command != null) { final BigDecimal cost = getCommandCost(user); if (!user.canAfford(cost) && cost.signum() > 0) { - future.completeExceptionally(new ChargeException(user.playerTl("notEnoughMoney", NumberUtil.displayCurrency(cost, ess)))); + future.completeExceptionally(new ChargeException("notEnoughMoney", NumberUtil.displayCurrency(cost, ess))); return; } user.takeMoney(cost); @@ -315,7 +315,7 @@ public void charge(final IUser user, final CompletableFuture future) { } final int experience = SetExpFix.getTotalExperience(user.getBase()); if (experience < getExperience() && getExperience() > 0) { - future.completeExceptionally(new ChargeException(user.playerTl("notEnoughExperience"))); + future.completeExceptionally(new ChargeException("notEnoughExperience")); return; } SetExpFix.setTotalExperience(user.getBase(), experience - getExperience()); diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 16cabcf3ffb..c928cba85b9 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -271,7 +271,7 @@ public void payUser(final User reciever, final BigDecimal value, final UserBalan final TransactionEvent transactionEvent = new TransactionEvent(this.getSource(), reciever, value); ess.getServer().getPluginManager().callEvent(transactionEvent); } else { - throw new ChargeException(tlLocale(playerLocale, "notEnoughMoney", NumberUtil.displayCurrency(value, ess))); + throw new ChargeException("notEnoughMoney", NumberUtil.displayCurrency(value, ess)); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Warps.java b/Essentials/src/main/java/com/earth2me/essentials/Warps.java index 418abddd60f..37b8cc752c8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Warps.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Warps.java @@ -5,7 +5,6 @@ import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.StringUtil; import net.ess3.api.InvalidNameException; -import net.ess3.api.InvalidWorldException; import net.ess3.api.TranslatableException; import org.bukkit.Location; @@ -54,7 +53,7 @@ public Collection getList() { } @Override - public Location getWarp(final String warp) throws WarpNotFoundException, InvalidWorldException { + public Location getWarp(final String warp) throws WarpNotFoundException { final EssentialsConfiguration conf = warpPoints.get(new StringIgnoreCase(warp)); if (conf == null) { throw new WarpNotFoundException(); @@ -79,7 +78,7 @@ public void setWarp(final IUser user, final String name, final Location loc) thr if (conf == null) { final File confFile = new File(warpsFolder, filename + ".yml"); if (confFile.exists()) { - throw new Exception(user == null ? tlLiteral("similarWarpExist") : user.playerTl("similarWarpExist")); + throw new TranslatableException("similarWarpExist"); } conf = new EssentialsConfiguration(confFile); conf.load(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java b/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java index d9af55ab6fd..93ed13f1a65 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java +++ b/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java @@ -22,9 +22,8 @@ public interface IWarps extends IConf { * @param warp - Warp name * @return - Location the warp is set to * @throws WarpNotFoundException When the warp is not found - * @throws net.ess3.api.InvalidWorldException When the world the warp is in is not found */ - Location getWarp(String warp) throws WarpNotFoundException, net.ess3.api.InvalidWorldException; + Location getWarp(String warp) throws WarpNotFoundException; /** * Checks if the provided name is a warp. diff --git a/Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java b/Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java deleted file mode 100644 index 670d229cc5f..00000000000 --- a/Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.earth2me.essentials.api; - -import net.ess3.api.TranslatableException; - -/** - * @deprecated This exception is unused. Use {@link net.ess3.api.InvalidWorldException} instead. - */ -@Deprecated -public class InvalidWorldException extends TranslatableException { - private final String world; - - public InvalidWorldException(final String world) { - super("invalidWorld"); - this.world = world; - } - - public String getWorld() { - return this.world; - } -} diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java index 93c271dca89..6d44ba2ecb5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java @@ -3,6 +3,7 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.AdventureUtil; +import com.earth2me.essentials.utils.FormatUtil; import com.google.common.collect.Lists; import net.ess3.api.TranslatableException; import org.bukkit.Server; @@ -53,7 +54,7 @@ private void sendBroadcast(final World world, final String name, final String me if (message.isEmpty()) { throw new NotEnoughArgumentsException(); } - ess.broadcastTl(null, u -> !u.getBase().getWorld().equals(world), true, "broadcast", message, AdventureUtil.parsed(AdventureUtil.legacyToMini(name))); + ess.broadcastTl(null, u -> !u.getBase().getWorld().equals(world), true, "broadcast", FormatUtil.replaceFormat(message).replace("\\n", "\n"), AdventureUtil.parsed(AdventureUtil.legacyToMini(name))); } @Override diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandclearinventory.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandclearinventory.java index f0d1ff55f5c..3a284ff0c6a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandclearinventory.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandclearinventory.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.StringUtil; import com.earth2me.essentials.utils.VersionUtil; +import net.ess3.api.TranslatableException; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -80,7 +81,7 @@ private void parseCommand(final Server server, final CommandSource sender, final } } - protected void clearHandler(final CommandSource sender, final Player player, final String[] args, final int offset, final boolean showExtended) { + protected void clearHandler(final CommandSource sender, final Player player, final String[] args, final int offset, final boolean showExtended) throws TranslatableException { ClearHandlerType type = ClearHandlerType.ALL_EXCEPT_ARMOR; final Set items = new HashSet<>(); int amount = -1; @@ -124,6 +125,11 @@ protected void clearHandler(final CommandSource sender, final Player player, fin stack.setDurability(item.getData()); } + // can't remove a negative amount of items. (it adds them) + if (amount < -1) { + throw new TranslatableException("cannotRemoveNegativeItems"); + } + // amount -1 means all items will be cleared if (amount == -1) { final int removedAmount = Inventories.removeItemSimilar(player, stack, true); @@ -131,7 +137,6 @@ protected void clearHandler(final CommandSource sender, final Player player, fin sender.sendTl("inventoryClearingStack", removedAmount, stack.getType().toString().toLowerCase(Locale.ENGLISH), player.getDisplayName()); } } else { - stack.setAmount(amount < 0 ? 1 : amount); if (Inventories.removeItemAmount(player, stack, amount)) { sender.sendTl("inventoryClearingStack", amount, stack.getType().toString().toLowerCase(Locale.ENGLISH), player.getDisplayName()); } else { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelhome.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelhome.java index 7446bf978f2..95ce6115268 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelhome.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commanddelhome.java @@ -18,6 +18,24 @@ public Commanddelhome() { super("delhome"); } + private void deleteHome(CommandSource sender, User user, String home) { + final HomeModifyEvent event = new HomeModifyEvent(sender.getUser(), user, home, user.getHome(home), false); + Bukkit.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + if (ess.getSettings().isDebug()) { + ess.getLogger().info("HomeModifyEvent canceled for /delhome execution by " + sender.getDisplayName()); + } + return; + } + + try { + user.delHome(home); + } catch (Exception e) { + sender.sendTl("invalidHome", home); + } + sender.sendTl("deleteHome", home); + } + @Override public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 1) { @@ -45,21 +63,19 @@ public void run(final Server server, final CommandSource sender, final String co name = expandedArg[0].toLowerCase(Locale.ENGLISH); } - if (name.equals("bed")) { - throw new TranslatableException("invalidHomeName"); - } - - final HomeModifyEvent event = new HomeModifyEvent(sender.getUser(), user, name, user.getHome(name), false); - Bukkit.getServer().getPluginManager().callEvent(event); - if (event.isCancelled()) { - if (ess.getSettings().isDebug()) { - ess.getLogger().info("HomeModifyEvent canceled for /delhome execution by " + sender.getDisplayName()); - } - return; + switch (name) { + case "bed": + throw new TranslatableException("invalidHomeName"); + case "*": + final List homes = user.getHomes(); + for (String home : homes) { + deleteHome(sender, user, home); + } + break; + default: + deleteHome(sender, user, name); + break; } - - user.delHome(name); - sender.sendTl("deleteHome", name); } @Override @@ -81,6 +97,7 @@ protected List getTabCompleteOptions(final Server server, final CommandS return homes; } otherUser.getHomes().forEach(home -> homes.add(namePart + ":" + home)); + homes.add(namePart + ":" + "*"); } } return homes; diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandenchant.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandenchant.java index 091ee56a70b..3e3c652b144 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandenchant.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandenchant.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeSet; @@ -35,7 +34,7 @@ protected void run(final Server server, final User user, final String commandLab if (args.length == 0) { final Set usableEnchants = new TreeSet<>(); for (final Map.Entry entry : Enchantments.entrySet()) { - final String name = entry.getValue().getName().toLowerCase(Locale.ENGLISH); + final String name = Enchantments.getRealName(entry.getValue()); if (usableEnchants.contains(name) || (user.isAuthorized("essentials.enchantments." + name) && entry.getValue().canEnchantItem(stack))) { usableEnchants.add(entry.getKey()); } @@ -57,7 +56,7 @@ protected void run(final Server server, final User user, final String commandLab metaStack.addEnchantment(user.getSource(), ess.getSettings().allowUnsafeEnchantments() && user.isAuthorized("essentials.enchantments.allowunsafe"), enchantment, level); stack.setItemMeta(metaStack.getItemStack().getItemMeta()); user.getBase().updateInventory(); - final String enchantName = enchantment.getName().toLowerCase(Locale.ENGLISH).replace('_', ' '); + final String enchantName = Enchantments.getRealName(enchantment).replace('_', ' '); if (level == 0) { user.sendTl("enchantmentRemoved", enchantName); } else { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java index eede838dae6..1d65353eff4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandessentials.java @@ -10,10 +10,10 @@ import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.CommandMapUtil; import com.earth2me.essentials.utils.DateUtil; -import com.earth2me.essentials.utils.EnumUtil; import com.earth2me.essentials.utils.FloatUtil; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.PasteUtil; +import com.earth2me.essentials.utils.RegistryUtil; import com.earth2me.essentials.utils.VersionUtil; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -67,8 +67,8 @@ // This command has 4 undocumented behaviours #EasterEgg public class Commandessentials extends EssentialsCommand { - private static final Sound NOTE_HARP = EnumUtil.valueOf(Sound.class, "BLOCK_NOTE_BLOCK_HARP", "BLOCK_NOTE_HARP", "NOTE_PIANO"); - private static final Sound MOO_SOUND = EnumUtil.valueOf(Sound.class, "COW_IDLE", "ENTITY_COW_MILK"); + private static final Sound NOTE_HARP = RegistryUtil.valueOf(Sound.class, "BLOCK_NOTE_BLOCK_HARP", "BLOCK_NOTE_HARP", "NOTE_PIANO"); + private static final Sound MOO_SOUND = RegistryUtil.valueOf(Sound.class, "COW_IDLE", "ENTITY_COW_MILK"); private static final String HOMES_USAGE = "/ homes (fix | delete [world])"; diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfireball.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfireball.java index f6b14dd9fc3..68acccac263 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfireball.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfireball.java @@ -19,6 +19,7 @@ import org.bukkit.entity.SplashPotion; import org.bukkit.entity.ThrownExpBottle; import org.bukkit.entity.Trident; +import org.bukkit.entity.WindCharge; import org.bukkit.entity.WitherSkull; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.util.Vector; @@ -55,6 +56,10 @@ public class Commandfireball extends EssentialsCommand { builder.put("trident", Trident.class); } + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_21_R01)) { + builder.put("windcharge", WindCharge.class); + } + types = builder.build(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfirework.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfirework.java index 53238793aa1..0caddc7c295 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfirework.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandfirework.java @@ -1,6 +1,7 @@ package com.earth2me.essentials.commands; import com.earth2me.essentials.MetaItemStack; +import com.earth2me.essentials.MobCompat; import com.earth2me.essentials.User; import com.earth2me.essentials.utils.MaterialUtil; import com.earth2me.essentials.utils.NumberUtil; @@ -9,7 +10,6 @@ import org.bukkit.DyeColor; import org.bukkit.FireworkEffect; import org.bukkit.Server; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Firework; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.FireworkMeta; @@ -81,7 +81,7 @@ protected void run(final Server server, final User user, final String commandLab } } for (int i = 0; i < amount; i++) { - final Firework firework = (Firework) user.getWorld().spawnEntity(user.getLocation(), EntityType.FIREWORK); + final Firework firework = (Firework) user.getWorld().spawnEntity(user.getLocation(), MobCompat.FIREWORK_ROCKET); final FireworkMeta fmeta = (FireworkMeta) stack.getItemMeta(); if (direction) { final Vector vector = user.getBase().getEyeLocation().getDirection().multiply(0.070); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgamemode.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgamemode.java index 52a2a2215c1..b5c6d05d77c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgamemode.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgamemode.java @@ -55,7 +55,7 @@ protected void run(final Server server, final User user, final String commandLab } if (isProhibitedChange(user, gameMode)) { - user.sendTl("cantGamemode", gameMode.name()); + user.sendTl("cantGamemode", user.playerTl(gameMode.toString().toLowerCase(Locale.ENGLISH))); return; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelp.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelp.java index 453a35bbcd7..2df0eb13f38 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelp.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.MissingResourceException; public class Commandhelp extends EssentialsCommand { public Commandhelp() { @@ -37,18 +38,25 @@ protected void run(final Server server, final User user, final String commandLab final String cmd = pageStr.substring(1); for (final Map.Entry knownCmd : ess.getKnownCommandsProvider().getKnownCommands().entrySet()) { if (knownCmd.getKey().equalsIgnoreCase(cmd)) { + final Command bukkit = knownCmd.getValue(); + final boolean isEssCommand = bukkit instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) bukkit).getPlugin().equals(ess); + final IEssentialsCommand essCommand = isEssCommand ? ess.getCommandMap().get(bukkit.getName()) : null; user.sendTl("commandHelpLine1", cmd); - user.sendTl("commandHelpLine2", knownCmd.getValue().getDescription()); - user.sendTl("commandHelpLine4", knownCmd.getValue().getAliases().toString()); + String description = bukkit.getDescription(); + if (essCommand != null) { + try { + description = user.playerTl(bukkit.getName() + "CommandDescription"); + } catch (MissingResourceException ignored) {} + } + user.sendTl("commandHelpLine2", description); + user.sendTl("commandHelpLine4", bukkit.getAliases().toString()); user.sendTl("commandHelpLine3"); - final boolean isEssCommand = knownCmd.getValue() instanceof PluginIdentifiableCommand && ((PluginIdentifiableCommand) knownCmd.getValue()).getPlugin().equals(ess); - final IEssentialsCommand essCommand = isEssCommand ? ess.getCommandMap().get(knownCmd.getValue().getName()) : null; if (essCommand != null && !essCommand.getUsageStrings().isEmpty()) { for (Map.Entry usage : essCommand.getUsageStrings().entrySet()) { user.sendTl("commandHelpLineUsage", AdventureUtil.parsed(usage.getKey().replace("", cmd)), AdventureUtil.parsed(usage.getValue())); } } else { - user.sendMessage(knownCmd.getValue().getUsage()); + user.sendMessage(bukkit.getUsage()); } return; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelpop.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelpop.java index 28d5870dd65..690348a9800 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelpop.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelpop.java @@ -51,6 +51,11 @@ private void sendMessage(final IMessageRecipient from, final String[] args) thro final HelpopMessageSendEvent sendEvent = new HelpopMessageSendEvent(from, recipients, message); ess.getServer().getPluginManager().callEvent(sendEvent); + final IUser sender = (IUser) from; + if(!recipients.contains(sender)){ + from.sendTl("helpOp", from.getDisplayName(), message); + } + for (IUser recipient : sendEvent.getRecipients()) { recipient.sendTl("helpOp", from.getDisplayName(), message); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkittycannon.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkittycannon.java index e40234f5218..18397f82f37 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkittycannon.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkittycannon.java @@ -2,6 +2,7 @@ import com.earth2me.essentials.Mob; import com.earth2me.essentials.User; +import com.earth2me.essentials.utils.RegistryUtil; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Cat; @@ -21,8 +22,12 @@ public Commandkittycannon() { private static Ocelot spawnOcelot(final Server server, final User user) throws Mob.MobException { final Ocelot ocelot = (Ocelot) Mob.OCELOT.spawn(user.getWorld(), server, user.getBase().getEyeLocation()); - final int i = random.nextInt(Ocelot.Type.values().length); - ocelot.setCatType(Ocelot.Type.values()[i]); + //noinspection deprecation + final Object[] values = RegistryUtil.values(Ocelot.Type.class); + + final int i = random.nextInt(values.length); + //noinspection deprecation + ocelot.setCatType((Ocelot.Type) values[i]); ((Tameable) ocelot).setTamed(true); ocelot.setBaby(); ocelot.setVelocity(user.getBase().getEyeLocation().getDirection().multiply(2)); @@ -31,8 +36,10 @@ private static Ocelot spawnOcelot(final Server server, final User user) throws M private static Entity spawnCat(final Server server, final User user) throws Mob.MobException { final Cat cat = (Cat) Mob.CAT.spawn(user.getWorld(), server, user.getBase().getEyeLocation()); - final int i = random.nextInt(Cat.Type.values().length); - cat.setCatType(Cat.Type.values()[i]); + final Object[] values = RegistryUtil.values(Cat.Type.class); + + final int i = random.nextInt(values.length); + cat.setCatType((Cat.Type) values[i]); cat.setTamed(true); cat.setBaby(); cat.setVelocity(user.getBase().getEyeLocation().getDirection().multiply(2)); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpay.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpay.java index 734c90fc8f2..38778c2fa1a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpay.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandpay.java @@ -109,8 +109,10 @@ public void run(final Server server, final User user, final String commandLabel, user.setMoney(user.getMoney().add(amount)); } catch (final MaxMoneyException ignored) { } + } catch (final TranslatableException e) { + throw e; } catch (final Exception e) { - user.sendMessage(e.getMessage()); + throw new TranslatableException("errorWithMessage", e.getMessage()); } }); if (informToConfirm.get()) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrecipe.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrecipe.java index b08a673a024..5d9a27beb00 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrecipe.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrecipe.java @@ -3,10 +3,12 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; import com.earth2me.essentials.craftbukkit.Inventories; +import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.EnumUtil; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.VersionUtil; import net.ess3.api.TranslatableException; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; import org.bukkit.Server; import org.bukkit.inventory.FurnaceRecipe; @@ -131,7 +133,7 @@ public void shapedRecipe(final CommandSource sender, final ShapedRecipe recipe, if (VersionUtil.PRE_FLATTENING && item.getDurability() == Short.MAX_VALUE) { item.setDurability((short) 0); } - view.getTopInventory().setItem(j * 3 + k + 1, item); + ess.getInventoryViewProvider().getTopInventory(view).setItem(j * 3 + k + 1, item); } } } else { @@ -150,18 +152,28 @@ public void shapedRecipe(final CommandSource sender, final ShapedRecipe recipe, materials[j][k] = item == null ? null : item.getType(); } } - sender.sendTl("recipeGrid", colorMap.get(materials[0][0]), colorMap.get(materials[0][1]), colorMap.get(materials[0][2])); - sender.sendTl("recipeGrid", colorMap.get(materials[1][0]), colorMap.get(materials[1][1]), colorMap.get(materials[1][2])); - sender.sendTl("recipeGrid", colorMap.get(materials[2][0]), colorMap.get(materials[2][1]), colorMap.get(materials[2][2])); + sender.sendTl("recipeGrid", colorTag(colorMap, materials, 0, 0), colorTag(colorMap, materials, 0, 1), colorTag(colorMap, materials, 0, 2)); + sender.sendTl("recipeGrid", colorTag(colorMap, materials, 1, 0), colorTag(colorMap, materials, 1, 1), colorTag(colorMap, materials, 1, 2)); + sender.sendTl("recipeGrid", colorTag(colorMap, materials, 2, 0), colorTag(colorMap, materials, 2, 1), colorTag(colorMap, materials, 2, 2)); final StringBuilder s = new StringBuilder(); for (final Material items : colorMap.keySet().toArray(new Material[0])) { - s.append(sender.tl("recipeGridItem", colorMap.get(items), getMaterialName(sender, items))); + s.append(sender.tl("recipeGridItem", colorMap.get(items), getMaterialName(sender, items))).append(" "); } - sender.sendTl("recipeWhere", s.toString()); + sender.sendTl("recipeWhere", AdventureUtil.parsed(s.toString())); } } + private AdventureUtil.ParsedPlaceholder colorTag(final Map colorMap, final Material[][] materials, final int x, final int y) { + final char colorChar = colorMap.get(materials[x][y]).charAt(0); + final NamedTextColor namedTextColor = AdventureUtil.fromChar(colorChar); + if (namedTextColor == null) { + throw new IllegalStateException("Illegal amount of materials in recipe"); + } + + return AdventureUtil.parsed("<" + namedTextColor + ">" + colorChar); + } + public void shapelessRecipe(final CommandSource sender, final ShapelessRecipe recipe, final boolean showWindow) { final List ingredients = recipe.getIngredientList(); if (showWindow) { @@ -174,7 +186,7 @@ public void shapelessRecipe(final CommandSource sender, final ShapelessRecipe re if (VersionUtil.PRE_FLATTENING && item.getDurability() == Short.MAX_VALUE) { item.setDurability((short) 0); } - view.setItem(i + 1, item); + ess.getInventoryViewProvider().setItem(view, i + 1, item); } } else { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java index 18fe69663c5..4e4d0c21cb6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java @@ -3,10 +3,12 @@ import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.User; import org.bukkit.Server; +import org.bukkit.World; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class Commandsettpr extends EssentialsCommand { public Commandsettpr() { @@ -15,22 +17,20 @@ public Commandsettpr() { @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - if (args.length == 0) { + if (args.length < 2) { throw new NotEnoughArgumentsException(); } - final RandomTeleport randomTeleport = ess.getRandomTeleport(); - randomTeleport.getCachedLocations().clear(); - if ("center".equalsIgnoreCase(args[0])) { - randomTeleport.setCenter(user.getLocation()); + if ("center".equalsIgnoreCase(args[1])) { + randomTeleport.setCenter(args[0], user.getLocation()); user.sendTl("settpr"); - } else if (args.length > 1) { - if ("minrange".equalsIgnoreCase(args[0])) { - randomTeleport.setMinRange(Double.parseDouble(args[1])); - } else if ("maxrange".equalsIgnoreCase(args[0])) { - randomTeleport.setMaxRange(Double.parseDouble(args[1])); + } else if (args.length > 2) { + if ("minrange".equalsIgnoreCase(args[1])) { + randomTeleport.setMinRange(args[0], Double.parseDouble(args[2])); + } else if ("maxrange".equalsIgnoreCase(args[1])) { + randomTeleport.setMaxRange(args[0], Double.parseDouble(args[2])); } - user.sendTl("settprValue", args[0].toLowerCase(), args[1].toLowerCase()); + user.sendTl("settprValue", args[1].toLowerCase(), args[2].toLowerCase()); } else { throw new NotEnoughArgumentsException(); } @@ -39,6 +39,8 @@ protected void run(final Server server, final User user, final String commandLab @Override protected List getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { if (args.length == 1) { + return user.getServer().getWorlds().stream().map(World::getName).collect(Collectors.toList()); + } else if (args.length == 2) { return Arrays.asList("center", "minrange", "maxrange"); } return Collections.emptyList(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java index 8f5af697533..f5adff26d03 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java @@ -4,7 +4,6 @@ import com.earth2me.essentials.api.IWarps; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.StringUtil; -import net.ess3.api.InvalidWorldException; import net.ess3.api.TranslatableException; import net.essentialsx.api.v2.events.WarpModifyEvent; import org.bukkit.Bukkit; @@ -31,7 +30,7 @@ public void run(final Server server, final User user, final String commandLabel, try { warpLoc = warps.getWarp(args[0]); - } catch (final WarpNotFoundException | InvalidWorldException ignored) { + } catch (final WarpNotFoundException ignored) { } if (warpLoc == null) { final WarpModifyEvent event = new WarpModifyEvent(user, args[0], null, user.getLocation(), WarpModifyEvent.WarpModifyCause.CREATE); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempban.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempban.java index 7c785a83559..fde30d244ce 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempban.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempban.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.User; import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.DateUtil; +import com.earth2me.essentials.utils.FormatUtil; import org.bukkit.BanList; import org.bukkit.Server; @@ -36,7 +37,7 @@ public void run(final Server server, final CommandSource sender, final String co } final String time = getFinalArg(args, 1); final long banTimestamp = DateUtil.parseDateDiff(time, true); - String banReason = DateUtil.removeTimePattern(time); + String banReason = FormatUtil.replaceFormat(DateUtil.removeTimePattern(time)); final long maxBanLength = ess.getSettings().getMaxTempban() * 1000; if (maxBanLength > 0 && ((banTimestamp - GregorianCalendar.getInstance().getTimeInMillis()) > maxBanLength) && sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.tempban.unlimited")) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempbanip.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempbanip.java index 4b08657405a..e3105dfa94f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempbanip.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtempbanip.java @@ -49,7 +49,7 @@ public void run(final Server server, final CommandSource sender, final String co final String time = getFinalArg(args, 1); final long banTimestamp = DateUtil.parseDateDiff(time, true); - String banReason = DateUtil.removeTimePattern(time); + String banReason = FormatUtil.replaceFormat(DateUtil.removeTimePattern(time)); final long maxBanLength = ess.getSettings().getMaxTempban() * 1000; if (maxBanLength > 0 && ((banTimestamp - GregorianCalendar.getInstance().getTimeInMillis()) > maxBanLength) && sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.tempban.unlimited")) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java index 14ab13192f0..589a7f7c6f4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java @@ -1,8 +1,10 @@ package com.earth2me.essentials.commands; +import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; +import net.ess3.api.TranslatableException; import net.ess3.api.events.UserRandomTeleportEvent; import org.bukkit.Server; import org.bukkit.event.player.PlayerTeleportEvent; @@ -10,6 +12,7 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; public class Commandtpr extends EssentialsCommand { @@ -22,25 +25,67 @@ protected void run(final Server server, final User user, final String commandLab final Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); final RandomTeleport randomTeleport = ess.getRandomTeleport(); - final UserRandomTeleportEvent event = new UserRandomTeleportEvent(user, randomTeleport.getCenter(), randomTeleport.getMinRange(), randomTeleport.getMaxRange()); + final String defaultLocation = randomTeleport.getDefaultLocation().replace("{world}", user.getLocation().getWorld().getName()); + final String name = args.length > 0 ? args[0] : defaultLocation; + final User userToTeleport = args.length > 1 && user.isAuthorized("essentials.tpr.others") ? getPlayer(server, user, args, 1) : user; + if (randomTeleport.isPerLocationPermission() && !user.isAuthorized("essentials.tpr.location." + name)) { + throw new TranslatableException("warpUsePermission"); + } + final UserRandomTeleportEvent event = new UserRandomTeleportEvent(userToTeleport, name, randomTeleport.getCenter(name), randomTeleport.getMinRange(name), randomTeleport.getMaxRange(name)); server.getPluginManager().callEvent(event); if (event.isCancelled()) { return; } - randomTeleport.getRandomLocation(event.getCenter(), event.getMinRange(), event.getMaxRange()).thenAccept(location -> { - final CompletableFuture future = getNewExceptionFuture(user.getSource(), commandLabel); - user.getAsyncTeleport().teleport(location, charge, PlayerTeleportEvent.TeleportCause.COMMAND, future); - future.thenAccept(success -> { - if (success) { - user.sendTl("tprSuccess"); - } - }); - }); + (event.isModified() ? randomTeleport.getRandomLocation(event.getCenter(), event.getMinRange(), event.getMaxRange()) : randomTeleport.getRandomLocation(name)) + .thenAccept(location -> { + final CompletableFuture future = getNewExceptionFuture(user.getSource(), commandLabel); + future.thenAccept(success -> { + if (success) { + userToTeleport.sendTl("tprSuccess"); + } + }); + userToTeleport.getAsyncTeleport().teleport(location, charge, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); throw new NoChargeException(); } @Override - protected List getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { + protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { + if (args.length < 2) { + throw new NotEnoughArgumentsException(); + } + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + final User userToTeleport = getPlayer(server, sender, args, 1); + final String name = args[0]; + final UserRandomTeleportEvent event = new UserRandomTeleportEvent(userToTeleport, name, randomTeleport.getCenter(name), randomTeleport.getMinRange(name), randomTeleport.getMaxRange(name)); + server.getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + (event.isModified() ? randomTeleport.getRandomLocation(event.getCenter(), event.getMinRange(), event.getMaxRange()) : randomTeleport.getRandomLocation(name)) + .thenAccept(location -> { + final CompletableFuture future = getNewExceptionFuture(sender, commandLabel); + future.thenAccept(success -> { + if (success) { + userToTeleport.sendTl("tprSuccess"); + } + }); + userToTeleport.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); + } + + @Override + protected List getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + if (args.length == 1) { + if (randomTeleport.isPerLocationPermission()) { + return randomTeleport.listLocations().stream().filter(name -> sender.isAuthorized("essentials.tpr.location." + name)).collect(Collectors.toList()); + } else { + return randomTeleport.listLocations(); + } + } else if (args.length == 2 && sender.isAuthorized("essentials.tpr.others")) { + return getPlayers(server, sender); + } return Collections.emptyList(); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsLoopCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsLoopCommand.java index 4c48caa3e55..18418c58734 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsLoopCommand.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsLoopCommand.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.utils.FormatUtil; import com.earth2me.essentials.utils.StringUtil; import net.ess3.api.MaxMoneyException; +import net.ess3.api.TranslatableException; import org.bukkit.Server; import org.bukkit.entity.Player; @@ -18,11 +19,11 @@ public EssentialsLoopCommand(final String command) { super(command); } - protected void loopOfflinePlayers(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final String[] commandArgs) throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException, MaxMoneyException { + protected void loopOfflinePlayers(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final String[] commandArgs) throws TranslatableException, NotEnoughArgumentsException { loopOfflinePlayersConsumer(server, sender, multipleStringMatches, matchWildcards, searchTerm, user -> updatePlayer(server, sender, user, commandArgs)); } - protected void loopOfflinePlayersConsumer(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final UserConsumer userConsumer) throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException, MaxMoneyException { + protected void loopOfflinePlayersConsumer(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final UserConsumer userConsumer) throws TranslatableException, NotEnoughArgumentsException { if (searchTerm.isEmpty()) { throw new PlayerNotFoundException(); } @@ -68,11 +69,11 @@ protected void loopOfflinePlayersConsumer(final Server server, final CommandSour } } - protected void loopOnlinePlayers(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final String[] commandArgs) throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException, MaxMoneyException { + protected void loopOnlinePlayers(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final String[] commandArgs) throws TranslatableException, NotEnoughArgumentsException { loopOnlinePlayersConsumer(server, sender, multipleStringMatches, matchWildcards, searchTerm, user -> updatePlayer(server, sender, user, commandArgs)); } - protected void loopOnlinePlayersConsumer(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final UserConsumer userConsumer) throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException, MaxMoneyException { + protected void loopOnlinePlayersConsumer(final Server server, final CommandSource sender, final boolean multipleStringMatches, final boolean matchWildcards, final String searchTerm, final UserConsumer userConsumer) throws NotEnoughArgumentsException, TranslatableException { if (searchTerm.isEmpty()) { throw new PlayerNotFoundException(); } @@ -143,6 +144,6 @@ protected List getPlayers(final Server server, final User interactor) { } public interface UserConsumer { - void accept(User user) throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException, MaxMoneyException; + void accept(User user) throws NotEnoughArgumentsException, TranslatableException; } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java b/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java index 2974a17c9e3..95d97ce9565 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java @@ -13,7 +13,6 @@ import com.earth2me.essentials.config.serializers.MailMessageSerializer; import com.earth2me.essentials.config.serializers.MaterialTypeSerializer; import com.earth2me.essentials.utils.AdventureUtil; -import net.ess3.api.InvalidWorldException; import net.essentialsx.api.v2.services.mail.MailMessage; import org.bukkit.Location; import org.bukkit.Material; @@ -123,7 +122,7 @@ public void setProperty(String path, final Location location) { setInternal(path, LazyLocation.fromLocation(location)); } - public LazyLocation getLocation(final String path) throws InvalidWorldException { + public LazyLocation getLocation(final String path) { final CommentedConfigurationNode node = path == null ? getRootNode() : getSection(path); if (node == null) { return null; diff --git a/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java b/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java index eb5c395bff8..fffccf9ca94 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java +++ b/Essentials/src/main/java/com/earth2me/essentials/craftbukkit/Inventories.java @@ -243,6 +243,10 @@ public static int removeItems(final Player player, final Predicate re } public static boolean removeItemAmount(final Player player, final ItemStack toRemove, int amount) { + if (amount < 0) { + throw new IllegalArgumentException("Amount cannot be negative."); + } + final List clearSlots = new ArrayList<>(); final ItemStack[] items = player.getInventory().getContents(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java index 19178c904c3..79043276de7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.items; +import com.earth2me.essentials.Enchantments; import com.earth2me.essentials.IConf; import com.earth2me.essentials.User; import com.earth2me.essentials.craftbukkit.Inventories; @@ -24,10 +25,8 @@ import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.plugin.Plugin; -import org.bukkit.potion.Potion; import org.bukkit.potion.PotionEffect; import java.util.ArrayList; @@ -220,7 +219,7 @@ public String serialize(final ItemStack is, final boolean useResolvers) { if (meta.hasEnchants()) { for (final Enchantment e : meta.getEnchants().keySet()) { - sb.append(e.getName().toLowerCase()).append(":").append(meta.getEnchantLevel(e)).append(" "); + sb.append(Enchantments.getRealName(e)).append(":").append(meta.getEnchantLevel(e)).append(" "); } } @@ -265,7 +264,7 @@ public String serialize(final ItemStack is, final boolean useResolvers) { case ENCHANTED_BOOK: final EnchantmentStorageMeta enchantmentStorageMeta = (EnchantmentStorageMeta) is.getItemMeta(); for (final Enchantment e : enchantmentStorageMeta.getStoredEnchants().keySet()) { - sb.append(e.getName().toLowerCase()).append(":").append(enchantmentStorageMeta.getStoredEnchantLevel(e)).append(" "); + sb.append(Enchantments.getRealName(e)).append(":").append(enchantmentStorageMeta.getStoredEnchantLevel(e)).append(" "); } break; } @@ -285,16 +284,8 @@ public String serialize(final ItemStack is, final boolean useResolvers) { serializeEffectMeta(sb, fireworkEffectMeta.getEffect()); } } else if (MaterialUtil.isPotion(material)) { - final boolean splash; - final Collection effects; - if (VersionUtil.PRE_FLATTENING) { - final Potion potion = Potion.fromDamage(is.getDurability()); - splash = potion.isSplash(); - effects = potion.getEffects(); - } else { - splash = is.getType() == Material.SPLASH_POTION; - effects = ((PotionMeta) is.getItemMeta()).getCustomEffects(); - } + final boolean splash = ess.getPotionMetaProvider().isSplashPotion(is); + final Collection effects = ess.getPotionMetaProvider().getCustomEffects(is); for (final PotionEffect e : effects) { // long but needs to be effect:speed power:2 duration:120 in that order. @@ -317,6 +308,7 @@ public String serialize(final ItemStack is, final boolean useResolvers) { sb.append("basecolor:").append(basecolor).append(" "); } for (final org.bukkit.block.banner.Pattern p : shieldBannerMeta.getPatterns()) { + //noinspection removal final String type = p.getPattern().getIdentifier(); final int color = p.getColor().getColor().asRGB(); sb.append(type).append(",").append(color).append(" "); @@ -324,7 +316,7 @@ public String serialize(final ItemStack is, final boolean useResolvers) { } else { final BannerMeta bannerMeta = (BannerMeta) is.getItemMeta(); if (bannerMeta != null) { - DyeColor baseDyeColor = bannerMeta.getBaseColor(); + DyeColor baseDyeColor = ess.getBannerDataProvider().getBaseColor(is); if (baseDyeColor == null) { baseDyeColor = MaterialUtil.getColorOf(material); } @@ -335,6 +327,7 @@ public String serialize(final ItemStack is, final boolean useResolvers) { sb.append("basecolor:").append(basecolor).append(" "); } for (final org.bukkit.block.banner.Pattern p : bannerMeta.getPatterns()) { + //noinspection removal final String type = p.getPattern().getIdentifier(); final int color = p.getColor().getColor().asRGB(); sb.append(type).append(",").append(color).append(" "); diff --git a/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java index bcb4a9beabf..af2e2f9108e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/FlatItemDb.java @@ -9,13 +9,14 @@ import com.google.gson.JsonParser; import net.ess3.api.IEssentials; import net.ess3.api.TranslatableException; +import net.ess3.provider.PotionMetaProvider; import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionType; import java.util.ArrayList; import java.util.Collection; @@ -23,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -127,14 +129,14 @@ public ItemStack get(String id, final boolean useResolvers) throws Exception { final ItemStack stack = new ItemStack(material); stack.setAmount(material.getMaxStackSize()); - final PotionData potionData = data.getPotionData(); - final ItemMeta meta = stack.getItemMeta(); + final ItemData.EssentialPotionData potionData = data.getPotionData(); - if (potionData != null && meta instanceof PotionMeta) { - final PotionMeta potionMeta = (PotionMeta) meta; - potionMeta.setBasePotionData(potionData); + if (potionData != null && stack.getItemMeta() instanceof PotionMeta) { + ess.getPotionMetaProvider().setBasePotionType(stack, potionData.getType(), potionData.isExtended(), potionData.isUpgraded()); } + final ItemMeta meta = stack.getItemMeta(); + // For some reason, Damageable doesn't extend ItemMeta but CB implements them in the same // class. As to why, your guess is as good as mine. if (split.length > 1 && meta instanceof Damageable) { @@ -200,14 +202,14 @@ public int getLegacyId(final Material material) { throw new UnsupportedOperationException("Legacy IDs aren't supported on this version."); } - private ItemData lookup(final ItemStack item) { - final Material type = item.getType(); + private ItemData lookup(final ItemStack is) { + final Material type = is.getType(); - if (MaterialUtil.isPotion(type) && item.getItemMeta() instanceof PotionMeta) { - final PotionData potion = ((PotionMeta) item.getItemMeta()).getBasePotionData(); - return new ItemData(type, potion); + if (MaterialUtil.isPotion(type) && is.getItemMeta() instanceof PotionMeta) { + final PotionMetaProvider provider = ess.getPotionMetaProvider(); + return new ItemData(type, new ItemData.EssentialPotionData(provider.getBasePotionType(is), provider.isUpgraded(is), provider.isExtended(is))); } else if (type.toString().contains("SPAWNER")) { - final EntityType entity = ess.getSpawnerItemProvider().getEntityType(item); + final EntityType entity = ess.getSpawnerItemProvider().getEntityType(is); return new ItemData(type, entity); } else { return new ItemData(type); @@ -224,14 +226,14 @@ public Collection listNames() { public static class ItemData { private Material material; private String[] fallbacks = null; - private PotionData potionData = null; + private EssentialPotionData potionData = null; private EntityType entity = null; ItemData(final Material material) { this.material = material; } - ItemData(final Material material, final PotionData potionData) { + ItemData(final Material material, final EssentialPotionData potionData) { this.material = material; this.potionData = potionData; } @@ -267,7 +269,7 @@ public Material getMaterial() { return material; } - public PotionData getPotionData() { + public EssentialPotionData getPotionData() { return this.potionData; } @@ -294,5 +296,51 @@ private boolean entityEquals(final ItemData o) { return false; } } + + public static class EssentialPotionData { + private PotionType type; + private String fallbackType; + private final boolean upgraded; + private final boolean extended; + + EssentialPotionData(PotionType type, boolean upgraded, boolean extended) { + this.type = type; + this.upgraded = upgraded; + this.extended = extended; + } + + public PotionType getType() { + if (type == null && fallbackType != null) { + type = EnumUtil.valueOf(PotionType.class, fallbackType); + fallbackType = null; // If fallback fails, don't keep trying to look up fallbacks + } + + return type; + } + + public boolean isUpgraded() { + return upgraded; + } + + public boolean isExtended() { + return extended; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + final EssentialPotionData that = (EssentialPotionData) o; + return upgraded == that.upgraded && + extended == that.extended && + // Use the getters here to ensure the fallbacks are being used + getType() == that.getType(); + } + + @Override + public int hashCode() { + return Objects.hash(getType(), upgraded, extended); + } + } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/messaging/SimpleMessageRecipient.java b/Essentials/src/main/java/com/earth2me/essentials/messaging/SimpleMessageRecipient.java index d52eeb294af..6c73641089b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/messaging/SimpleMessageRecipient.java +++ b/Essentials/src/main/java/com/earth2me/essentials/messaging/SimpleMessageRecipient.java @@ -121,15 +121,17 @@ public MessageResponse sendMessage(final IMessageRecipient recipient, String mes // Dont spy on chats involving socialspy exempt players && !senderUser.isAuthorized("essentials.chat.spy.exempt") && recipientUser != null && !recipientUser.isAuthorized("essentials.chat.spy.exempt")) { + final String senderName = ess.getSettings().isSocialSpyDisplayNames() ? getDisplayName() : getName(); + final String recipientName = ess.getSettings().isSocialSpyDisplayNames() ? recipient.getDisplayName() : recipient.getName(); for (final User onlineUser : ess.getOnlineUsers()) { if (onlineUser.isSocialSpyEnabled() // Don't send socialspy messages to message sender/receiver to prevent spam && !onlineUser.equals(senderUser) && !onlineUser.equals(recipient)) { if (senderUser.isMuted() && ess.getSettings().getSocialSpyListenMutedPlayers()) { - onlineUser.sendComponent(AdventureUtil.miniMessage().deserialize(tlSender("socialSpyMutedPrefix") + tlLiteral("socialSpyMsgFormat", getDisplayName(), recipient.getDisplayName(), message))); + onlineUser.sendComponent(AdventureUtil.miniMessage().deserialize(tlSender("socialSpyMutedPrefix") + tlLiteral("socialSpyMsgFormat", senderName, recipientName, message))); } else { - onlineUser.sendComponent(AdventureUtil.miniMessage().deserialize(tlLiteral("socialSpyPrefix") + tlLiteral("socialSpyMsgFormat", getDisplayName(), recipient.getDisplayName(), message))); + onlineUser.sendComponent(AdventureUtil.miniMessage().deserialize(tlLiteral("socialSpyPrefix") + tlLiteral("socialSpyMsgFormat", senderName, recipientName, message))); } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/main/java/com/earth2me/essentials/signs/EssentialsSign.java index 39921ee3f4f..97cac9e5b3d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/EssentialsSign.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/EssentialsSign.java @@ -550,9 +550,11 @@ public void updateSign() { static class BlockSign implements ISign { private final transient Block block; + private transient Sign sign; BlockSign(final Block block) { this.block = block; + this.sign = getSign(); } @Override @@ -569,7 +571,7 @@ public final String getLine(final int index) { @Override public final void setLine(final int index, final String text) { - getSign().setLine(index, text); + sign.setLine(index, text); updateSign(); } @@ -586,7 +588,8 @@ private Sign getSign() { @Override public final void updateSign() { - getSign().update(); + sign.update(); + sign = getSign(); } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignBuy.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignBuy.java index 76ca2045b34..8b59f79f62b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignBuy.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignBuy.java @@ -46,7 +46,7 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri charge.isAffordableFor(player); if (!items.pay(player)) { - throw new ChargeException("Inventory full"); //TODO: TL + throw new ChargeException("inventoryFull"); } charge.charge(player); Trade.log("Sign", "Buy", "Interact", username, charge, username, items, sign.getBlock().getLocation(), player.getMoney(), ess); diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignEnchant.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignEnchant.java index 47f29285a86..fe67342302c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignEnchant.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignEnchant.java @@ -106,7 +106,7 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri throw new SignException(ex, "errorWithMessage", ex.getMessage()); } - final String enchantmentName = enchantment.getName().toLowerCase(Locale.ENGLISH); + final String enchantmentName = Enchantments.getRealName(enchantment); if (level == 0) { player.sendTl("enchantmentRemoved", enchantmentName.replace('_', ' ')); } else { diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignHeal.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignHeal.java index f5eadaf2aaf..4f2856dad0a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignHeal.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignHeal.java @@ -21,9 +21,10 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri if (player.getBase().getHealth() == 0) { throw new SignException("healDead"); } + final double amount = player.getBase().getMaxHealth(); final Trade charge = getTrade(sign, 1, ess); charge.isAffordableFor(player); - player.getBase().setHealth(20); + player.getBase().setHealth(amount); player.getBase().setFoodLevel(20); player.getBase().setFireTicks(0); player.sendTl("youAreHealed"); diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java new file mode 100644 index 00000000000..8ffaf7bb2de --- /dev/null +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java @@ -0,0 +1,32 @@ +package com.earth2me.essentials.signs; + +import com.earth2me.essentials.ChargeException; +import com.earth2me.essentials.RandomTeleport; +import com.earth2me.essentials.User; +import net.ess3.api.IEssentials; +import net.ess3.api.MaxMoneyException; +import org.bukkit.event.player.PlayerTeleportEvent; + +import java.util.concurrent.CompletableFuture; + +public class SignRandomTeleport extends EssentialsSign { + public SignRandomTeleport() { + super("RandomTeleport"); + } + + @Override + protected boolean onSignInteract(ISign sign, User player, String username, IEssentials ess) throws SignException, ChargeException, MaxMoneyException { + final String name = sign.getLine(1); + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + randomTeleport.getRandomLocation(name).thenAccept(location -> { + final CompletableFuture future = new CompletableFuture<>(); + future.thenAccept(success -> { + if (success) { + player.sendTl("tprSuccess"); + } + }); + player.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); + return true; + } +} diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignRepair.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRepair.java index 7c448d25ba4..18d1fd06156 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignRepair.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRepair.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.commands.Commandrepair; import com.earth2me.essentials.commands.NotEnoughArgumentsException; import net.ess3.api.IEssentials; +import net.ess3.api.TranslatableException; public class SignRepair extends EssentialsSign { public SignRepair() { @@ -42,6 +43,8 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri throw new NotEnoughArgumentsException(); } + } catch (final TranslatableException ex) { + throw new SignException(ex.getTlKey(), ex.getArgs()); } catch (final Exception ex) { throw new SignException(ex, "errorWithMessage", ex.getMessage()); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignTrade.java index 39199faea59..f773eb2940f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignTrade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignTrade.java @@ -72,7 +72,7 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri if (!trade.pay(player)) { subtractAmount(sign, 1, charge, ess); addAmount(sign, 2, trade, ess); - throw new ChargeException("Full inventory"); + throw new ChargeException("inventoryFull"); } charge.charge(player); Trade.log("Sign", "Trade", "Interact", sign.getLine(3).substring(2), charge, username, trade, sign.getBlock().getLocation(), player.getMoney(), ess); diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignWarp.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignWarp.java index edb64f66e33..3f806811e1e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignWarp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignWarp.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; import net.ess3.api.IEssentials; +import net.ess3.api.TranslatableException; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import java.util.concurrent.CompletableFuture; @@ -25,6 +26,10 @@ protected boolean onSignCreate(final ISign sign, final User player, final String try { ess.getWarps().getWarp(warpName); } catch (final Exception ex) { + if (ex instanceof TranslatableException) { + final TranslatableException te = (TranslatableException) ex; + throw new SignException(ex, te.getTlKey(), te.getArgs()); + } throw new SignException(ex, "errorWithMessage", ex.getMessage()); } final String group = sign.getLine(2); diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java b/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java index 1d2fab98054..594e625b2b7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java @@ -25,7 +25,8 @@ public enum Signs { TRADE(new SignTrade()), WARP(new SignWarp()), WEATHER(new SignWeather()), - WORKBENCH(new SignWorkbench()); + WORKBENCH(new SignWorkbench()), + RANDOMTELEPORT(new SignRandomTeleport()); private final EssentialsSign sign; Signs(final EssentialsSign sign) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java index e3d361803f1..e32d4d218f8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java @@ -50,7 +50,7 @@ public final class AdventureUtil { } LEGACY_SERIALIZER = builder.build(); - MINI_MESSAGE_NO_TAGS = MiniMessage.miniMessage(); + MINI_MESSAGE_NO_TAGS = MiniMessage.builder().strict(true).build(); miniMessageInstance = createMiniMessageInstance(); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java index ecbfafe9183..ab3a8980f10 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/LocationUtil.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.utils; +import com.earth2me.essentials.Essentials; import com.earth2me.essentials.IEssentials; import net.ess3.api.IUser; import net.ess3.api.TranslatableException; @@ -40,10 +41,14 @@ public final class LocationUtil { private static final Set TRANSPARENT_MATERIALS = EnumSet.noneOf(Material.class); static { - // Materials from Material.isTransparent() - for (final Material mat : Material.values()) { - if (mat.isTransparent()) { - HOLLOW_MATERIALS.add(mat); + // If the server is running in a test environment, the isTransparent() method will blow up since + // it requires the registry to be initialized. This is a workaround to prevent that from happening. + if (!Essentials.TESTING) { + // Materials from Material.isTransparent() + for (final Material mat : Material.values()) { + if (mat.isTransparent()) { + HOLLOW_MATERIALS.add(mat); + } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/RegistryUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/RegistryUtil.java new file mode 100644 index 00000000000..a1efbdf125b --- /dev/null +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/RegistryUtil.java @@ -0,0 +1,70 @@ +package com.earth2me.essentials.utils; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +public final class RegistryUtil { + private static final Table, String, Object> registryCache = HashBasedTable.create(); + + private RegistryUtil() { + } + + public static Object[] values(Class registry) { + if (registry.getEnumConstants() != null) { + return registry.getEnumConstants(); + } + + //noinspection unchecked + final T[] values = (T[]) registryCache.get(registry, "$values"); + if (values != null) { + return values; + } + + final List set = new ArrayList<>(); + + for (final Field field : registry.getDeclaredFields()) { + try { + final Object value = field.get(null); + if (value != null && registry.isAssignableFrom(value.getClass())) { + //noinspection unchecked + set.add((T) value); + } + } catch (NullPointerException | IllegalAccessException ignored) { + } + } + + //noinspection unchecked + final T[] array = (T[]) new Object[set.size()]; + for (int i = 0; i < set.size(); i++) { + array[i] = set.get(i); + } + registryCache.put(registry, "$values", array); + + return array; + } + + public static T valueOf(Class registry, String... names) { + for (final String name : names) { + //noinspection unchecked + T value = (T) registryCache.get(registry, name); + if (value != null) { + return value; + } + + try { + //noinspection unchecked + value = (T) registry.getDeclaredField(name).get(null); + if (value != null) { + registryCache.put(registry, name, value); + return value; + } + } catch (NoSuchFieldException | IllegalAccessException ignored) { + } + } + return null; + } +} diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index b3788d83540..fd84e69b1d2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -39,8 +39,11 @@ public final class VersionUtil { public static final BukkitVersion v1_19_4_R01 = BukkitVersion.fromString("1.19.4-R0.1-SNAPSHOT"); public static final BukkitVersion v1_20_1_R01 = BukkitVersion.fromString("1.20.1-R0.1-SNAPSHOT"); public static final BukkitVersion v1_20_4_R01 = BukkitVersion.fromString("1.20.4-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_20_6_R01 = BukkitVersion.fromString("1.20.6-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_21_R01 = BukkitVersion.fromString("1.21-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_21_3_R01 = BukkitVersion.fromString("1.21.3-R0.1-SNAPSHOT"); - private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_2_R01, v1_19_4_R01, v1_20_4_R01); + private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01, v1_17_1_R01, v1_18_2_R01, v1_19_4_R01, v1_20_6_R01, v1_21_3_R01); public static final boolean PRE_FLATTENING = VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01); diff --git a/Essentials/src/main/java/net/ess3/api/InvalidWorldException.java b/Essentials/src/main/java/net/ess3/api/InvalidWorldException.java deleted file mode 100644 index 4a536fdda89..00000000000 --- a/Essentials/src/main/java/net/ess3/api/InvalidWorldException.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.ess3.api; - -/** - * Fired when trying to teleport a user to an invalid world. This usually only occurs if a world has been removed from - * the server and a player tries to teleport to a warp or home in that world. - */ -public class InvalidWorldException extends TranslatableException { - private final String world; - - public InvalidWorldException(final String world) { - super("invalidWorld"); - this.world = world; - } - - public String getWorld() { - return this.world; - } -} diff --git a/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java b/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java index d7dc4403da1..d31b2f03631 100644 --- a/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java +++ b/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java @@ -14,14 +14,17 @@ public class UserRandomTeleportEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); private final IUser user; + private String name; private Location center; private double minRange; private double maxRange; private boolean cancelled = false; + private boolean modified = false; - public UserRandomTeleportEvent(final IUser user, final Location center, final double minRange, final double maxRange) { + public UserRandomTeleportEvent(final IUser user, final String name, final Location center, final double minRange, final double maxRange) { super(!Bukkit.isPrimaryThread()); this.user = user; + this.name = name; this.center = center; this.minRange = minRange; this.maxRange = maxRange; @@ -35,11 +38,23 @@ public IUser getUser() { return user; } + public String getName() { + return name; + } + public Location getCenter() { return center; } + /** + * Sets the center location to teleport from. + * + * @param center Center location. + */ public void setCenter(final Location center) { + if (!this.center.equals(center)) { + modified = true; + } this.center = center; } @@ -47,7 +62,15 @@ public double getMinRange() { return minRange; } + /** + * Sets the minimum range for the teleport. + * + * @param minRange Minimum range. + */ public void setMinRange(final double minRange) { + if (this.minRange != minRange) { + modified = true; + } this.minRange = minRange; } @@ -55,7 +78,15 @@ public double getMaxRange() { return maxRange; } + /** + * Sets the maximum range for the teleport. + * + * @param maxRange Maximum range. + */ public void setMaxRange(final double maxRange) { + if (this.maxRange != maxRange) { + modified = true; + } this.maxRange = maxRange; } @@ -69,6 +100,10 @@ public void setCancelled(final boolean b) { cancelled = b; } + public boolean isModified() { + return modified; + } + @Override public HandlerList getHandlers() { return handlers; diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 201e5c15bf0..b796a51b2c9 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -213,6 +213,10 @@ socialspy-listen-muted-players: true # If false, social spy will only monitor commands from the list above. socialspy-messages: true +# Whether social spy should use formatted display names which may include color. +# If false, social spy will use only the actual player names. +socialspy-uses-displaynames: true + # The following settings listen for when a player changes worlds. # If you use another plugin to control speed and flight, you should change these to false. @@ -383,6 +387,7 @@ enabledSigns: #- loom #- smithing #- workbench + #- randomteleport # How many times per second can Essentials signs be interacted with per player. # Values should be between 1-20, 20 being virtually no lag protection. @@ -931,7 +936,7 @@ chat: # If you are using group formats make sure to remove the '#' to allow the setting to be read. # Note: Group names are case-sensitive so you must match them up with your permission plugin. - + # You can use permissions to control whether players can use formatting codes in their chat messages. # See https://essentialsx.net/wiki/Color-Permissions.html for more information. @@ -1193,6 +1198,12 @@ respawn-at-home-bed: true # When users die, should EssentialsSpawn respect users' respawn anchors? respawn-at-anchor: false +# If configured, users will spawn at the random spawn location instead of the newbies spawnpoint. +random-spawn-location: "none" + +# If configured, when users die, they will respawn at the random respawn location. +random-respawn-location: "none" + # Teleport all joining players to the spawnpoint spawn-on-join: false # The following value of `guests` states that all players in group `guests` will be teleported to spawn when joining. diff --git a/Essentials/src/main/resources/items.json b/Essentials/src/main/resources/items.json index c8f74341c23..58ca206b7fa 100644 --- a/Essentials/src/main/resources/items.json +++ b/Essentials/src/main/resources/items.json @@ -492,6 +492,16 @@ "archerpotterysherd": "archer_pottery_sherd", "archersherd": "archer_pottery_sherd", "minecraft:archer_pottery_sherd": "archer_pottery_sherd", + "armadillo_scute": { + "material": "ARMADILLO_SCUTE" + }, + "armadilloscute": "armadillo_scute", + "minecraft:armadillo_scute": "armadillo_scute", + "armadillo_spawn_egg": { + "material": "ARMADILLO_SPAWN_EGG" + }, + "armadillospawnegg": "armadillo_spawn_egg", + "minecraft:armadillo_spawn_egg": "armadillo_spawn_egg", "armor_stand": { "material": "ARMOR_STAND" }, @@ -1681,6 +1691,13 @@ "blabed": "black_bed", "blackbed": "black_bed", "minecraft:black_bed": "black_bed", + "black_bundle": { + "material": "BLACK_BUNDLE" + }, + "bkbundle": "black_bundle", + "blabundle": "black_bundle", + "blackbundle": "black_bundle", + "minecraft:black_bundle": "black_bundle", "black_candle": { "material": "BLACK_CANDLE" }, @@ -1937,6 +1954,12 @@ "blubed": "blue_bed", "bluebed": "blue_bed", "minecraft:blue_bed": "blue_bed", + "blue_bundle": { + "material": "BLUE_BUNDLE" + }, + "blubundle": "blue_bundle", + "bluebundle": "blue_bundle", + "minecraft:blue_bundle": "blue_bundle", "blue_candle": { "material": "BLUE_CANDLE" }, @@ -2071,6 +2094,36 @@ "bluewool": "blue_wool", "bluwool": "blue_wool", "minecraft:blue_wool": "blue_wool", + "bogged_spawn_egg": { + "material": "BOGGED_SPAWN_EGG" + }, + "boggedegg": "bogged_spawn_egg", + "boggedsegg": "bogged_spawn_egg", + "boggedspawn": "bogged_spawn_egg", + "boggedspawnegg": "bogged_spawn_egg", + "eggbogged": "bogged_spawn_egg", + "minecraft:bogged_spawn_egg": "bogged_spawn_egg", + "seggbogged": "bogged_spawn_egg", + "spawnbogged": "bogged_spawn_egg", + "spawneggbogged": "bogged_spawn_egg", + "bogged_spawner": { + "entity": "BOGGED", + "material": "SPAWNER" + }, + "boggedcage": "bogged_spawner", + "boggedmcage": "bogged_spawner", + "boggedmobcage": "bogged_spawner", + "boggedmobspawner": "bogged_spawner", + "boggedmonstercage": "bogged_spawner", + "boggedmonsterspawner": "bogged_spawner", + "boggedmspawner": "bogged_spawner", + "boggedspawner": "bogged_spawner", + "bolt_armor_trim_smithing_template": { + "material": "BOLT_ARMOR_TRIM_SMITHING_TEMPLATE" + }, + "boltarmortrimsmithingtemplate": "bolt_armor_trim_smithing_template", + "bolttrim": "bolt_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template": "bolt_armor_trim_smithing_template", "bone": { "material": "BONE" }, @@ -2099,6 +2152,11 @@ "casebook": "bookshelf", "minecraft:bookshelf": "bookshelf", "shelfbook": "bookshelf", + "bordure_indented_banner_pattern": { + "material": "BORDURE_INDENTED_BANNER_PATTERN" + }, + "bordureindentedbannerpattern": "bordure_indented_banner_pattern", + "minecraft:bordure_indented_banner_pattern": "bordure_indented_banner_pattern", "bow": { "material": "BOW" }, @@ -2126,6 +2184,35 @@ "material": "BREAD" }, "minecraft:bread": "bread", + "breeze_rod": { + "material": "BREEZE_ROD" + }, + "breezerod": "breeze_rod", + "minecraft:breeze_rod": "breeze_rod", + "breeze_spawn_egg": { + "material": "BREEZE_SPAWN_EGG" + }, + "breezeegg": "breeze_spawn_egg", + "breezesegg": "breeze_spawn_egg", + "breezespawn": "breeze_spawn_egg", + "breezespawnegg": "breeze_spawn_egg", + "eggbreeze": "breeze_spawn_egg", + "minecraft:breeze_spawn_egg": "breeze_spawn_egg", + "seggbreeze": "breeze_spawn_egg", + "spawnbreeze": "breeze_spawn_egg", + "spawneggbreeze": "breeze_spawn_egg", + "breeze_spawner": { + "entity": "BREEZE", + "material": "SPAWNER" + }, + "breezecage": "breeze_spawner", + "breezemcage": "breeze_spawner", + "breezemobcage": "breeze_spawner", + "breezemobspawner": "breeze_spawner", + "breezemonstercage": "breeze_spawner", + "breezemonsterspawner": "breeze_spawner", + "breezemspawner": "breeze_spawner", + "breezespawner": "breeze_spawner", "brewer_pottery_sherd": { "material": "BREWER_POTTERY_SHERD" }, @@ -2175,6 +2262,13 @@ "brobed": "brown_bed", "brownbed": "brown_bed", "minecraft:brown_bed": "brown_bed", + "brown_bundle": { + "material": "BROWN_BUNDLE" + }, + "brbundle": "brown_bundle", + "brobundle": "brown_bundle", + "brownbundle": "brown_bundle", + "minecraft:brown_bundle": "brown_bundle", "brown_candle": { "material": "BROWN_CANDLE" }, @@ -3034,6 +3128,20 @@ "chiseledshelf": "chiseled_bookshelf", "cshelfbook": "chiseled_bookshelf", "minecraft:chiseled_bookshelf": "chiseled_bookshelf", + "chiseled_copper": { + "material": "CHISELED_COPPER" + }, + "chiseledcoblock": "chiseled_copper", + "chiseledcopblock": "chiseled_copper", + "chiseledcopper": "chiseled_copper", + "chiseledcopperblock": "chiseled_copper", + "cicoblock": "chiseled_copper", + "cicopblock": "chiseled_copper", + "cicopperblock": "chiseled_copper", + "circlecoblock": "chiseled_copper", + "circlecopblock": "chiseled_copper", + "circlecopperblock": "chiseled_copper", + "minecraft:chiseled_copper": "chiseled_copper", "chiseled_deepslate": { "material": "CHISELED_DEEPSLATE" }, @@ -3376,6 +3484,44 @@ "cist": "chiseled_stone_bricks", "cistone": "chiseled_stone_bricks", "minecraft:chiseled_stone_bricks": "chiseled_stone_bricks", + "chiseled_tuff": { + "material": "CHISELED_TUFF" + }, + "chiseledtuf": "chiseled_tuff", + "chiseledtufb": "chiseled_tuff", + "chiseledtufbl": "chiseled_tuff", + "chiseledtufblock": "chiseled_tuff", + "chiseledtuff": "chiseled_tuff", + "chiseledtuffb": "chiseled_tuff", + "chiseledtuffbl": "chiseled_tuff", + "chiseledtuffblock": "chiseled_tuff", + "circletuf": "chiseled_tuff", + "circletufb": "chiseled_tuff", + "circletufbl": "chiseled_tuff", + "circletufblock": "chiseled_tuff", + "circletuff": "chiseled_tuff", + "circletuffb": "chiseled_tuff", + "circletuffbl": "chiseled_tuff", + "circletuffblock": "chiseled_tuff", + "cituf": "chiseled_tuff", + "citufb": "chiseled_tuff", + "citufbl": "chiseled_tuff", + "citufblock": "chiseled_tuff", + "cituff": "chiseled_tuff", + "cituffb": "chiseled_tuff", + "cituffbl": "chiseled_tuff", + "cituffblock": "chiseled_tuff", + "minecraft:chiseled_tuff": "chiseled_tuff", + "chiseled_tuff_bricks": { + "material": "CHISELED_TUFF_BRICKS" + }, + "chiseledtuffbr": "chiseled_tuff_bricks", + "chiseledtuffbricks": "chiseled_tuff_bricks", + "circletuffbr": "chiseled_tuff_bricks", + "circletuffbricks": "chiseled_tuff_bricks", + "cituffbr": "chiseled_tuff_bricks", + "cituffbricks": "chiseled_tuff_bricks", + "minecraft:chiseled_tuff_bricks": "chiseled_tuff_bricks", "chorus_flower": { "material": "CHORUS_FLOWER" }, @@ -4183,6 +4329,21 @@ "purecoblock": "copper_block", "purecopblock": "copper_block", "purecopperblock": "copper_block", + "copper_bulb": { + "material": "COPPER_BULB" + }, + "copperbulb": "copper_bulb", + "minecraft:copper_bulb": "copper_bulb", + "copper_door": { + "material": "COPPER_DOOR" + }, + "copperdoor": "copper_door", + "minecraft:copper_door": "copper_door", + "copper_grate": { + "material": "COPPER_GRATE" + }, + "coppergrate": "copper_grate", + "minecraft:copper_grate": "copper_grate", "copper_ingot": { "material": "COPPER_INGOT" }, @@ -4224,6 +4385,11 @@ "stonecopore": "copper_ore", "stonecopperore": "copper_ore", "stonecoppore": "copper_ore", + "copper_trapdoor": { + "material": "COPPER_TRAPDOOR" + }, + "coppertrapdoor": "copper_trapdoor", + "minecraft:copper_trapdoor": "copper_trapdoor", "cornflower": { "material": "CORNFLOWER" }, @@ -4389,6 +4555,10 @@ "crst": "cracked_stone_bricks", "crstone": "cracked_stone_bricks", "minecraft:cracked_stone_bricks": "cracked_stone_bricks", + "crafter": { + "material": "CRAFTER" + }, + "minecraft:crafter": "crafter", "crafting_table": { "material": "CRAFTING_TABLE" }, @@ -4827,6 +4997,12 @@ "cbed": "cyan_bed", "cyanbed": "cyan_bed", "minecraft:cyan_bed": "cyan_bed", + "cyan_bundle": { + "material": "CYAN_BUNDLE" + }, + "cbundle": "cyan_bundle", + "cyanbundle": "cyan_bundle", + "minecraft:cyan_bundle": "cyan_bundle", "cyan_candle": { "material": "CYAN_CANDLE" }, @@ -6325,67 +6501,6 @@ "oreemerald": "emerald_ore", "stoneemeraldore": "emerald_ore", "stoneeore": "emerald_ore", - "empty_lingering_potion": { - "potionData": { - "type": "UNCRAFTABLE", - "upgraded": false, - "extended": false - }, - "material": "LINGERING_POTION" - }, - "aoepotionuncraftable": "empty_lingering_potion", - "aoepotuncraftable": "empty_lingering_potion", - "areapotionuncraftable": "empty_lingering_potion", - "areapotuncraftable": "empty_lingering_potion", - "cloudpotionuncraftable": "empty_lingering_potion", - "cloudpotuncraftable": "empty_lingering_potion", - "lingerpotuncraftable": "empty_lingering_potion", - "uncraftableaoepoiont": "empty_lingering_potion", - "uncraftableaoepot": "empty_lingering_potion", - "uncraftableareapot": "empty_lingering_potion", - "uncraftableareapotion": "empty_lingering_potion", - "uncraftablecloudpot": "empty_lingering_potion", - "uncraftablecloudpotion": "empty_lingering_potion", - "uncraftablelingerpot": "empty_lingering_potion", - "empty_potion": { - "potionData": { - "type": "UNCRAFTABLE", - "upgraded": false, - "extended": false - }, - "material": "POTION" - }, - "potionofuncraftable": "empty_potion", - "potofuncraftable": "empty_potion", - "uncraftablepot": "empty_potion", - "uncraftablepotion": "empty_potion", - "empty_splash_potion": { - "potionData": { - "type": "UNCRAFTABLE", - "upgraded": false, - "extended": false - }, - "material": "SPLASH_POTION" - }, - "splashuncraftablepot": "empty_splash_potion", - "splashuncraftablepotion": "empty_splash_potion", - "spluncraftablepot": "empty_splash_potion", - "spluncraftablepotion": "empty_splash_potion", - "uncraftablesplashpot": "empty_splash_potion", - "uncraftablesplashpotion": "empty_splash_potion", - "empty_tipped_arrow": { - "potionData": { - "type": "UNCRAFTABLE", - "upgraded": false, - "extended": false - }, - "material": "TIPPED_ARROW" - }, - "arrowuncraftable": "empty_tipped_arrow", - "uncraftablearrow": "empty_tipped_arrow", - "uncraftabletarr": "empty_tipped_arrow", - "uncraftabletarrow": "empty_tipped_arrow", - "uncraftabletippedarrow": "empty_tipped_arrow", "enchanted_book": { "material": "ENCHANTED_BOOK" }, @@ -6681,6 +6796,65 @@ "explorerpotterysherd": "explorer_pottery_sherd", "explorersherd": "explorer_pottery_sherd", "minecraft:explorer_pottery_sherd": "explorer_pottery_sherd", + "exposed_chiseled_copper": { + "material": "EXPOSED_CHISELED_COPPER" + }, + "chiseledexcoblock": "exposed_chiseled_copper", + "chiseledexcopblock": "exposed_chiseled_copper", + "chiseledexcopperblock": "exposed_chiseled_copper", + "chiseledexpcoblock": "exposed_chiseled_copper", + "chiseledexpcopblock": "exposed_chiseled_copper", + "chiseledexpcopperblock": "exposed_chiseled_copper", + "chiseledexposedcoblock": "exposed_chiseled_copper", + "chiseledexposedcopblock": "exposed_chiseled_copper", + "chiseledexposedcopperblock": "exposed_chiseled_copper", + "ciexcoblock": "exposed_chiseled_copper", + "ciexcopblock": "exposed_chiseled_copper", + "ciexcopperblock": "exposed_chiseled_copper", + "ciexpcoblock": "exposed_chiseled_copper", + "ciexpcopblock": "exposed_chiseled_copper", + "ciexpcopperblock": "exposed_chiseled_copper", + "ciexposedcoblock": "exposed_chiseled_copper", + "ciexposedcopblock": "exposed_chiseled_copper", + "ciexposedcopperblock": "exposed_chiseled_copper", + "circleexcoblock": "exposed_chiseled_copper", + "circleexcopblock": "exposed_chiseled_copper", + "circleexcopperblock": "exposed_chiseled_copper", + "circleexpcoblock": "exposed_chiseled_copper", + "circleexpcopblock": "exposed_chiseled_copper", + "circleexpcopperblock": "exposed_chiseled_copper", + "circleexposedcoblock": "exposed_chiseled_copper", + "circleexposedcopblock": "exposed_chiseled_copper", + "circleexposedcopperblock": "exposed_chiseled_copper", + "exchiseledcoblock": "exposed_chiseled_copper", + "exchiseledcopblock": "exposed_chiseled_copper", + "exchiseledcopperblock": "exposed_chiseled_copper", + "excicoblock": "exposed_chiseled_copper", + "excicopblock": "exposed_chiseled_copper", + "excicopperblock": "exposed_chiseled_copper", + "excirclecoblock": "exposed_chiseled_copper", + "excirclecopblock": "exposed_chiseled_copper", + "excirclecopperblock": "exposed_chiseled_copper", + "expchiseledcoblock": "exposed_chiseled_copper", + "expchiseledcopblock": "exposed_chiseled_copper", + "expchiseledcopperblock": "exposed_chiseled_copper", + "expcicoblock": "exposed_chiseled_copper", + "expcicopblock": "exposed_chiseled_copper", + "expcicopperblock": "exposed_chiseled_copper", + "expcirclecoblock": "exposed_chiseled_copper", + "expcirclecopblock": "exposed_chiseled_copper", + "expcirclecopperblock": "exposed_chiseled_copper", + "exposedchiseledcoblock": "exposed_chiseled_copper", + "exposedchiseledcopblock": "exposed_chiseled_copper", + "exposedchiseledcopper": "exposed_chiseled_copper", + "exposedchiseledcopperblock": "exposed_chiseled_copper", + "exposedcicoblock": "exposed_chiseled_copper", + "exposedcicopblock": "exposed_chiseled_copper", + "exposedcicopperblock": "exposed_chiseled_copper", + "exposedcirclecoblock": "exposed_chiseled_copper", + "exposedcirclecopblock": "exposed_chiseled_copper", + "exposedcirclecopperblock": "exposed_chiseled_copper", + "minecraft:exposed_chiseled_copper": "exposed_chiseled_copper", "exposed_copper": { "material": "EXPOSED_COPPER" }, @@ -6695,6 +6869,59 @@ "exposedcopper": "exposed_copper", "exposedcopperblock": "exposed_copper", "minecraft:exposed_copper": "exposed_copper", + "exposed_copper_bulb": { + "material": "EXPOSED_COPPER_BULB" + }, + "exbulb": "exposed_copper_bulb", + "expbulb": "exposed_copper_bulb", + "exposedbulb": "exposed_copper_bulb", + "exposedcopperbulb": "exposed_copper_bulb", + "minecraft:exposed_copper_bulb": "exposed_copper_bulb", + "exposed_copper_door": { + "material": "EXPOSED_COPPER_DOOR" + }, + "doorex": "exposed_copper_door", + "doorexp": "exposed_copper_door", + "doorexposed": "exposed_copper_door", + "exdoor": "exposed_copper_door", + "expdoor": "exposed_copper_door", + "exposedcopperdoor": "exposed_copper_door", + "exposeddoor": "exposed_copper_door", + "minecraft:exposed_copper_door": "exposed_copper_door", + "exposed_copper_grate": { + "material": "EXPOSED_COPPER_GRATE" + }, + "exgrate": "exposed_copper_grate", + "expgrate": "exposed_copper_grate", + "exposedcoppergrate": "exposed_copper_grate", + "exposedgrate": "exposed_copper_grate", + "minecraft:exposed_copper_grate": "exposed_copper_grate", + "exposed_copper_trapdoor": { + "material": "EXPOSED_COPPER_TRAPDOOR" + }, + "exdoort": "exposed_copper_trapdoor", + "exdoortrap": "exposed_copper_trapdoor", + "exdtrap": "exposed_copper_trapdoor", + "exhatch": "exposed_copper_trapdoor", + "expdoort": "exposed_copper_trapdoor", + "expdoortrap": "exposed_copper_trapdoor", + "expdtrap": "exposed_copper_trapdoor", + "exphatch": "exposed_copper_trapdoor", + "exposedcoppertrapdoor": "exposed_copper_trapdoor", + "exposeddoort": "exposed_copper_trapdoor", + "exposeddoortrap": "exposed_copper_trapdoor", + "exposeddtrap": "exposed_copper_trapdoor", + "exposedhatch": "exposed_copper_trapdoor", + "exposedtdoor": "exposed_copper_trapdoor", + "exposedtrapd": "exposed_copper_trapdoor", + "exposedtrapdoor": "exposed_copper_trapdoor", + "exptdoor": "exposed_copper_trapdoor", + "exptrapd": "exposed_copper_trapdoor", + "exptrapdoor": "exposed_copper_trapdoor", + "extdoor": "exposed_copper_trapdoor", + "extrapd": "exposed_copper_trapdoor", + "extrapdoor": "exposed_copper_trapdoor", + "minecraft:exposed_copper_trapdoor": "exposed_copper_trapdoor", "exposed_cut_copper": { "material": "EXPOSED_CUT_COPPER" }, @@ -6983,6 +7210,11 @@ "material": "FERN" }, "minecraft:fern": "fern", + "field_masoned_banner_pattern": { + "material": "FIELD_MASONED_BANNER_PATTERN" + }, + "fieldmasonedbannerpattern": "field_masoned_banner_pattern", + "minecraft:field_masoned_banner_pattern": "field_masoned_banner_pattern", "filled_map": { "material": "FILLED_MAP" }, @@ -7156,6 +7388,23 @@ }, "flintandsteel": "flint_and_steel", "minecraft:flint_and_steel": "flint_and_steel", + "flow_armor_trim_smithing_template": { + "material": "FLOW_ARMOR_TRIM_SMITHING_TEMPLATE" + }, + "flowarmortrimsmithingtemplate": "flow_armor_trim_smithing_template", + "flowtrim": "flow_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template": "flow_armor_trim_smithing_template", + "flow_banner_pattern": { + "material": "FLOW_BANNER_PATTERN" + }, + "flowbannerpattern": "flow_banner_pattern", + "minecraft:flow_banner_pattern": "flow_banner_pattern", + "flow_pottery_sherd": { + "material": "FLOW_POTTERY_SHERD" + }, + "flowpotterysherd": "flow_pottery_sherd", + "flowsherd": "flow_pottery_sherd", + "minecraft:flow_pottery_sherd": "flow_pottery_sherd", "flower_banner_pattern": { "material": "FLOWER_BANNER_PATTERN" }, @@ -7846,6 +8095,19 @@ "graybed": "gray_bed", "greybed": "gray_bed", "minecraft:gray_bed": "gray_bed", + "gray_bundle": { + "material": "GRAY_BUNDLE" + }, + "darkgrabundle": "gray_bundle", + "darkgraybundle": "gray_bundle", + "darkgreybundle": "gray_bundle", + "dgrabundle": "gray_bundle", + "dgraybundle": "gray_bundle", + "dgreybundle": "gray_bundle", + "grabundle": "gray_bundle", + "graybundle": "gray_bundle", + "greybundle": "gray_bundle", + "minecraft:gray_bundle": "gray_bundle", "gray_candle": { "material": "GRAY_CANDLE" }, @@ -8225,6 +8487,16 @@ "grebed": "green_bed", "greenbed": "green_bed", "minecraft:green_bed": "green_bed", + "green_bundle": { + "material": "GREEN_BUNDLE" + }, + "darkgrebundle": "green_bundle", + "darkgreenbundle": "green_bundle", + "dgrebundle": "green_bundle", + "dgreenbundle": "green_bundle", + "grebundle": "green_bundle", + "greenbundle": "green_bundle", + "minecraft:green_bundle": "green_bundle", "green_candle": { "material": "GREEN_CANDLE" }, @@ -8530,6 +8802,18 @@ "material": "GUNPOWDER" }, "minecraft:gunpowder": "gunpowder", + "guster_banner_pattern": { + "material": "GUSTER_BANNER_PATTERN" + }, + "gusterbannerpattern": "guster_banner_pattern", + "minecraft:guster_banner_pattern": "guster_banner_pattern", + "guster_pottery_sherd": { + "material": "GUSTER_POTTERY_SHERD" + }, + "gusterpotterysherd": "guster_pottery_sherd", + "gustersherd": "guster_pottery_sherd", + "gustsherd": "guster_pottery_sherd", + "minecraft:guster_pottery_sherd": "guster_pottery_sherd", "hanging_roots": { "material": "HANGING_ROOTS" }, @@ -8543,7 +8827,8 @@ "minecraft:hanging_roots": "hanging_roots", "harming_lingering_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8621,7 +8906,8 @@ "lingerpotinstantdamage": "harming_lingering_potion", "harming_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8649,7 +8935,8 @@ "potofinstantdamage": "harming_potion", "harming_splash_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8687,7 +8974,8 @@ "splinstantdamagepotion": "harming_splash_potion", "harming_tipped_arrow": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8729,7 +9017,8 @@ "minecraft:hay_block": "hay_block", "healing_lingering_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8807,7 +9096,8 @@ "lingerpotlife": "healing_lingering_potion", "healing_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8835,7 +9125,8 @@ "potoflife": "healing_potion", "healing_splash_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8873,7 +9164,8 @@ "spllifepotion": "healing_splash_potion", "healing_tipped_arrow": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8923,6 +9215,11 @@ "heartbreaksherd": "heartbreak_pottery_sherd", "heartbsherd": "heartbreak_pottery_sherd", "minecraft:heartbreak_pottery_sherd": "heartbreak_pottery_sherd", + "heavy_core": { + "material": "HEAVY_CORE" + }, + "heavycore": "heavy_core", + "minecraft:heavy_core": "heavy_core", "heavy_weighted_pressure_plate": { "material": "HEAVY_WEIGHTED_PRESSURE_PLATE" }, @@ -9688,6 +9985,42 @@ "trapslateb": "infested_deepslate", "trapslatebl": "infested_deepslate", "trapslateblock": "infested_deepslate", + "infested_lingering_potion": { + "potionData": { + "type": "INFESTED", + "upgraded": false, + "extended": false + }, + "material": "LINGERING_POTION" + }, + "aoepotinfest": "infested_lingering_potion", + "aoepotinfested": "infested_lingering_potion", + "aoepotioninfest": "infested_lingering_potion", + "aoepotioninfested": "infested_lingering_potion", + "areapotinfest": "infested_lingering_potion", + "areapotinfested": "infested_lingering_potion", + "areapotioninfest": "infested_lingering_potion", + "areapotioninfested": "infested_lingering_potion", + "cloudpotinfest": "infested_lingering_potion", + "cloudpotinfested": "infested_lingering_potion", + "cloudpotioninfest": "infested_lingering_potion", + "cloudpotioninfested": "infested_lingering_potion", + "infestaoepoiont": "infested_lingering_potion", + "infestaoepot": "infested_lingering_potion", + "infestareapot": "infested_lingering_potion", + "infestareapotion": "infested_lingering_potion", + "infestcloudpot": "infested_lingering_potion", + "infestcloudpotion": "infested_lingering_potion", + "infestedaoepoiont": "infested_lingering_potion", + "infestedaoepot": "infested_lingering_potion", + "infestedareapot": "infested_lingering_potion", + "infestedareapotion": "infested_lingering_potion", + "infestedcloudpot": "infested_lingering_potion", + "infestedcloudpotion": "infested_lingering_potion", + "infestedlingerpot": "infested_lingering_potion", + "infestlingerpot": "infested_lingering_potion", + "lingerpotinfest": "infested_lingering_potion", + "lingerpotinfested": "infested_lingering_potion", "infested_mossy_stone_bricks": { "material": "INFESTED_MOSSY_STONE_BRICKS" }, @@ -9813,6 +10146,42 @@ "trapmossystone": "infested_mossy_stone_bricks", "trapmst": "infested_mossy_stone_bricks", "trapmstone": "infested_mossy_stone_bricks", + "infested_potion": { + "potionData": { + "type": "INFESTED", + "upgraded": false, + "extended": false + }, + "material": "POTION" + }, + "infestedpot": "infested_potion", + "infestedpotion": "infested_potion", + "infestpot": "infested_potion", + "infestpotion": "infested_potion", + "potionofinfest": "infested_potion", + "potionofinfested": "infested_potion", + "potofinfest": "infested_potion", + "potofinfested": "infested_potion", + "infested_splash_potion": { + "potionData": { + "type": "INFESTED", + "upgraded": false, + "extended": false + }, + "material": "SPLASH_POTION" + }, + "infestedsplashpot": "infested_splash_potion", + "infestedsplashpotion": "infested_splash_potion", + "infestsplashpot": "infested_splash_potion", + "infestsplashpotion": "infested_splash_potion", + "splashinfestedpot": "infested_splash_potion", + "splashinfestedpotion": "infested_splash_potion", + "splashinfestpot": "infested_splash_potion", + "splashinfestpotion": "infested_splash_potion", + "splinfestedpot": "infested_splash_potion", + "splinfestedpotion": "infested_splash_potion", + "splinfestpot": "infested_splash_potion", + "splinfestpotion": "infested_splash_potion", "infested_stone": { "material": "INFESTED_STONE" }, @@ -9951,6 +10320,24 @@ "trapstonebr": "infested_stone_bricks", "trapstonebrick": "infested_stone_bricks", "trapstonebricks": "infested_stone_bricks", + "infested_tipped_arrow": { + "potionData": { + "type": "INFESTED", + "upgraded": false, + "extended": false + }, + "material": "TIPPED_ARROW" + }, + "arrowinfest": "infested_tipped_arrow", + "arrowinfested": "infested_tipped_arrow", + "infestarrow": "infested_tipped_arrow", + "infestedarrow": "infested_tipped_arrow", + "infestedtarr": "infested_tipped_arrow", + "infestedtarrow": "infested_tipped_arrow", + "infestedtippedarrow": "infested_tipped_arrow", + "infesttarr": "infested_tipped_arrow", + "infesttarrow": "infested_tipped_arrow", + "infesttippedarrow": "infested_tipped_arrow", "ink_sac": { "material": "INK_SAC" }, @@ -10977,7 +11364,8 @@ "minecraft:lead": "lead", "leaping_lingering_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11027,7 +11415,8 @@ "lingerpotleaping": "leaping_lingering_potion", "leaping_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11047,7 +11436,8 @@ "potofleaping": "leaping_potion", "leaping_splash_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11073,7 +11463,8 @@ "splleappotion": "leaping_splash_potion", "leaping_tipped_arrow": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11183,6 +11574,16 @@ "lightblubed": "light_blue_bed", "lightbluebed": "light_blue_bed", "minecraft:light_blue_bed": "light_blue_bed", + "light_blue_bundle": { + "material": "LIGHT_BLUE_BUNDLE" + }, + "lbbundle": "light_blue_bundle", + "lblubundle": "light_blue_bundle", + "lbluebundle": "light_blue_bundle", + "light_bluebundle": "light_blue_bundle", + "lightblubundle": "light_blue_bundle", + "lightbluebundle": "light_blue_bundle", + "minecraft:light_blue_bundle": "light_blue_bundle", "light_blue_candle": { "material": "LIGHT_BLUE_CANDLE" }, @@ -11467,6 +11868,21 @@ "siabed": "light_gray_bed", "sibed": "light_gray_bed", "silverbed": "light_gray_bed", + "light_gray_bundle": { + "material": "LIGHT_GRAY_BUNDLE" + }, + "lgbundle": "light_gray_bundle", + "lgrabundle": "light_gray_bundle", + "lgraybundle": "light_gray_bundle", + "lgreybundle": "light_gray_bundle", + "light_graybundle": "light_gray_bundle", + "lightgrabundle": "light_gray_bundle", + "lightgraybundle": "light_gray_bundle", + "lightgreybundle": "light_gray_bundle", + "minecraft:light_gray_bundle": "light_gray_bundle", + "siabundle": "light_gray_bundle", + "sibundle": "light_gray_bundle", + "silverbundle": "light_gray_bundle", "light_gray_candle": { "material": "LIGHT_GRAY_CANDLE" }, @@ -11945,6 +12361,16 @@ "lightgreenbed": "lime_bed", "limebed": "lime_bed", "minecraft:lime_bed": "lime_bed", + "lime_bundle": { + "material": "LIME_BUNDLE" + }, + "lbundle": "lime_bundle", + "lgrebundle": "lime_bundle", + "lgreenbundle": "lime_bundle", + "lightgrebundle": "lime_bundle", + "lightgreenbundle": "lime_bundle", + "limebundle": "lime_bundle", + "minecraft:lime_bundle": "lime_bundle", "lime_candle": { "material": "LIME_CANDLE" }, @@ -13313,7 +13739,8 @@ "invlongtippedarrow": "long_invisibility_tipped_arrow", "long_leaping_lingering_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -13531,7 +13958,8 @@ "lingerpotleaplong": "long_leaping_lingering_potion", "long_leaping_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -13599,7 +14027,8 @@ "potofleaplong": "long_leaping_potion", "long_leaping_splash_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -13697,7 +14126,8 @@ "splleaplongpotion": "long_leaping_splash_potion", "long_leaping_tipped_arrow": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -15294,7 +15724,8 @@ "poisonlongtippedarrow": "long_poison_tipped_arrow", "long_regeneration_lingering_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -15512,7 +15943,8 @@ "regenlingerpotlong": "long_regeneration_lingering_potion", "long_regeneration_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -15580,7 +16012,8 @@ "regenlongpotion": "long_regeneration_potion", "long_regeneration_splash_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -15678,7 +16111,8 @@ "splregenlongpotion": "long_regeneration_splash_potion", "long_regeneration_tipped_arrow": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -17017,7 +17451,8 @@ "stronglongtippedarrow": "long_strength_tipped_arrow", "long_swiftness_lingering_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -17235,7 +17670,8 @@ "swiftnesslingerpotlong": "long_swiftness_lingering_potion", "long_swiftness_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -17303,7 +17739,8 @@ "swiftnesslongpotion": "long_swiftness_potion", "long_swiftness_splash_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -17401,7 +17838,8 @@ "swiftnesslongsplashpotion": "long_swiftness_splash_potion", "long_swiftness_tipped_arrow": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -19296,6 +19734,10 @@ "luckytarr": "luck_tipped_arrow", "luckytarrow": "luck_tipped_arrow", "luckytippedarrow": "luck_tipped_arrow", + "mace": { + "material": "MACE" + }, + "minecraft:mace": "mace", "magenta_banner": { "material": "MAGENTA_BANNER" }, @@ -19308,6 +19750,12 @@ "magentabed": "magenta_bed", "mbed": "magenta_bed", "minecraft:magenta_bed": "magenta_bed", + "magenta_bundle": { + "material": "MAGENTA_BUNDLE" + }, + "magentabundle": "magenta_bundle", + "mbundle": "magenta_bundle", + "minecraft:magenta_bundle": "magenta_bundle", "magenta_candle": { "material": "MAGENTA_CANDLE" }, @@ -19935,6 +20383,43 @@ "spawnmushroom": "mooshroom_spawn_egg", "spawnmushroom_cow": "mooshroom_spawn_egg", "spawnmushroomcow": "mooshroom_spawn_egg", + "mooshroom_spawner": { + "entity": "MOOSHROOM", + "material": "SPAWNER" + }, + "mooshroomcage": "mooshroom_spawner", + "mooshroommcage": "mooshroom_spawner", + "mooshroommobcage": "mooshroom_spawner", + "mooshroommobspawner": "mooshroom_spawner", + "mooshroommonstercage": "mooshroom_spawner", + "mooshroommonsterspawner": "mooshroom_spawner", + "mooshroommspawner": "mooshroom_spawner", + "mooshroomspawner": "mooshroom_spawner", + "mushroom_cow_spawner": "mooshroom_spawner", + "mushroom_cowcage": "mooshroom_spawner", + "mushroom_cowmcage": "mooshroom_spawner", + "mushroom_cowmobcage": "mooshroom_spawner", + "mushroom_cowmobspawner": "mooshroom_spawner", + "mushroom_cowmonstercage": "mooshroom_spawner", + "mushroom_cowmonsterspawner": "mooshroom_spawner", + "mushroom_cowmspawner": "mooshroom_spawner", + "mushroom_cowspawner": "mooshroom_spawner", + "mushroomcage": "mooshroom_spawner", + "mushroomcowcage": "mooshroom_spawner", + "mushroomcowmcage": "mooshroom_spawner", + "mushroomcowmobcage": "mooshroom_spawner", + "mushroomcowmobspawner": "mooshroom_spawner", + "mushroomcowmonstercage": "mooshroom_spawner", + "mushroomcowmonsterspawner": "mooshroom_spawner", + "mushroomcowmspawner": "mooshroom_spawner", + "mushroomcowspawner": "mooshroom_spawner", + "mushroommcage": "mooshroom_spawner", + "mushroommobcage": "mooshroom_spawner", + "mushroommobspawner": "mooshroom_spawner", + "mushroommonstercage": "mooshroom_spawner", + "mushroommonsterspawner": "mooshroom_spawner", + "mushroommspawner": "mooshroom_spawner", + "mushroomspawner": "mooshroom_spawner", "moss_block": { "material": "MOSS_BLOCK" }, @@ -20319,42 +20804,6 @@ "mundanetarr": "mundane_tipped_arrow", "mundanetarrow": "mundane_tipped_arrow", "mundanetippedarrow": "mundane_tipped_arrow", - "mushroom_cow_spawner": { - "entity": "MUSHROOM_COW", - "material": "SPAWNER" - }, - "mooshroomcage": "mushroom_cow_spawner", - "mooshroommcage": "mushroom_cow_spawner", - "mooshroommobcage": "mushroom_cow_spawner", - "mooshroommobspawner": "mushroom_cow_spawner", - "mooshroommonstercage": "mushroom_cow_spawner", - "mooshroommonsterspawner": "mushroom_cow_spawner", - "mooshroommspawner": "mushroom_cow_spawner", - "mooshroomspawner": "mushroom_cow_spawner", - "mushroom_cowcage": "mushroom_cow_spawner", - "mushroom_cowmcage": "mushroom_cow_spawner", - "mushroom_cowmobcage": "mushroom_cow_spawner", - "mushroom_cowmobspawner": "mushroom_cow_spawner", - "mushroom_cowmonstercage": "mushroom_cow_spawner", - "mushroom_cowmonsterspawner": "mushroom_cow_spawner", - "mushroom_cowmspawner": "mushroom_cow_spawner", - "mushroom_cowspawner": "mushroom_cow_spawner", - "mushroomcage": "mushroom_cow_spawner", - "mushroomcowcage": "mushroom_cow_spawner", - "mushroomcowmcage": "mushroom_cow_spawner", - "mushroomcowmobcage": "mushroom_cow_spawner", - "mushroomcowmobspawner": "mushroom_cow_spawner", - "mushroomcowmonstercage": "mushroom_cow_spawner", - "mushroomcowmonsterspawner": "mushroom_cow_spawner", - "mushroomcowmspawner": "mushroom_cow_spawner", - "mushroomcowspawner": "mushroom_cow_spawner", - "mushroommcage": "mushroom_cow_spawner", - "mushroommobcage": "mushroom_cow_spawner", - "mushroommobspawner": "mushroom_cow_spawner", - "mushroommonstercage": "mushroom_cow_spawner", - "mushroommonsterspawner": "mushroom_cow_spawner", - "mushroommspawner": "mushroom_cow_spawner", - "mushroomspawner": "mushroom_cow_spawner", "mushroom_stem": { "material": "MUSHROOM_STEM" }, @@ -20757,6 +21206,31 @@ "remusicdisk": "music_disc_chirp", "remusicrecord": "music_disc_chirp", "rerecord": "music_disc_chirp", + "music_disc_creator": { + "material": "MUSIC_DISC_CREATOR" + }, + "cdcreator": "music_disc_creator", + "creatorcd": "music_disc_creator", + "creatordisc": "music_disc_creator", + "creatordisk": "music_disc_creator", + "creatormdisc": "music_disc_creator", + "creatormusicdisc": "music_disc_creator", + "creatormusicdisk": "music_disc_creator", + "creatormusicrecord": "music_disc_creator", + "creatorrecord": "music_disc_creator", + "disccreator": "music_disc_creator", + "diskcreator": "music_disc_creator", + "mdisccreator": "music_disc_creator", + "minecraft:music_disc_creator": "music_disc_creator", + "musicdisccreator": "music_disc_creator", + "musicdiskcreator": "music_disc_creator", + "musicrecordcreator": "music_disc_creator", + "recordcreator": "music_disc_creator", + "music_disc_creator_music_box": { + "material": "MUSIC_DISC_CREATOR_MUSIC_BOX" + }, + "minecraft:music_disc_creator_music_box": "music_disc_creator_music_box", + "musicdisccreatormusicbox": "music_disc_creator_music_box", "music_disc_far": { "material": "MUSIC_DISC_FAR" }, @@ -21209,6 +21683,26 @@ "recordnether": "music_disc_pigstep", "recordpig": "music_disc_pigstep", "recordpigstep": "music_disc_pigstep", + "music_disc_precipice": { + "material": "MUSIC_DISC_PRECIPICE" + }, + "cdprecipice": "music_disc_precipice", + "discprecipice": "music_disc_precipice", + "diskprecipice": "music_disc_precipice", + "mdiscprecipice": "music_disc_precipice", + "minecraft:music_disc_precipice": "music_disc_precipice", + "musicdiscprecipice": "music_disc_precipice", + "musicdiskprecipice": "music_disc_precipice", + "musicrecordprecipice": "music_disc_precipice", + "precipicecd": "music_disc_precipice", + "precipicedisc": "music_disc_precipice", + "precipicedisk": "music_disc_precipice", + "precipicemdisc": "music_disc_precipice", + "precipicemusicdisc": "music_disc_precipice", + "precipicemusicdisk": "music_disc_precipice", + "precipicemusicrecord": "music_disc_precipice", + "precipicerecord": "music_disc_precipice", + "recordprecipice": "music_disc_precipice", "music_disc_relic": { "material": "MUSIC_DISC_RELIC" }, @@ -22491,6 +22985,107 @@ "ochrelight": "ochre_froglight", "ofroglight": "ochre_froglight", "olight": "ochre_froglight", + "ominous_bottle": { + "material": "OMINOUS_BOTTLE" + }, + "minecraft:ominous_bottle": "ominous_bottle", + "ominousbottle": "ominous_bottle", + "ominous_trial_key": { + "material": "OMINOUS_TRIAL_KEY" + }, + "minecraft:ominous_trial_key": "ominous_trial_key", + "ominouskey": "ominous_trial_key", + "ominoustrialkey": "ominous_trial_key", + "oozing_lingering_potion": { + "potionData": { + "type": "OOZING", + "upgraded": false, + "extended": false + }, + "material": "LINGERING_POTION" + }, + "aoepotionooze": "oozing_lingering_potion", + "aoepotionoozing": "oozing_lingering_potion", + "aoepotooze": "oozing_lingering_potion", + "aoepotoozing": "oozing_lingering_potion", + "areapotionooze": "oozing_lingering_potion", + "areapotionoozing": "oozing_lingering_potion", + "areapotooze": "oozing_lingering_potion", + "areapotoozing": "oozing_lingering_potion", + "cloudpotionooze": "oozing_lingering_potion", + "cloudpotionoozing": "oozing_lingering_potion", + "cloudpotooze": "oozing_lingering_potion", + "cloudpotoozing": "oozing_lingering_potion", + "lingerpotooze": "oozing_lingering_potion", + "lingerpotoozing": "oozing_lingering_potion", + "oozeaoepoiont": "oozing_lingering_potion", + "oozeaoepot": "oozing_lingering_potion", + "oozeareapot": "oozing_lingering_potion", + "oozeareapotion": "oozing_lingering_potion", + "oozecloudpot": "oozing_lingering_potion", + "oozecloudpotion": "oozing_lingering_potion", + "oozelingerpot": "oozing_lingering_potion", + "oozingaoepoiont": "oozing_lingering_potion", + "oozingaoepot": "oozing_lingering_potion", + "oozingareapot": "oozing_lingering_potion", + "oozingareapotion": "oozing_lingering_potion", + "oozingcloudpot": "oozing_lingering_potion", + "oozingcloudpotion": "oozing_lingering_potion", + "oozinglingerpot": "oozing_lingering_potion", + "oozing_potion": { + "potionData": { + "type": "OOZING", + "upgraded": false, + "extended": false + }, + "material": "POTION" + }, + "oozepot": "oozing_potion", + "oozepotion": "oozing_potion", + "oozingpot": "oozing_potion", + "oozingpotion": "oozing_potion", + "potionofooze": "oozing_potion", + "potionofoozing": "oozing_potion", + "potofooze": "oozing_potion", + "potofoozing": "oozing_potion", + "oozing_splash_potion": { + "potionData": { + "type": "OOZING", + "upgraded": false, + "extended": false + }, + "material": "SPLASH_POTION" + }, + "oozesplashpot": "oozing_splash_potion", + "oozesplashpotion": "oozing_splash_potion", + "oozingsplashpot": "oozing_splash_potion", + "oozingsplashpotion": "oozing_splash_potion", + "splashoozepot": "oozing_splash_potion", + "splashoozepotion": "oozing_splash_potion", + "splashoozingpot": "oozing_splash_potion", + "splashoozingpotion": "oozing_splash_potion", + "sploozepot": "oozing_splash_potion", + "sploozepotion": "oozing_splash_potion", + "sploozingpot": "oozing_splash_potion", + "sploozingpotion": "oozing_splash_potion", + "oozing_tipped_arrow": { + "potionData": { + "type": "OOZING", + "upgraded": false, + "extended": false + }, + "material": "TIPPED_ARROW" + }, + "arrowooze": "oozing_tipped_arrow", + "arrowoozing": "oozing_tipped_arrow", + "oozearrow": "oozing_tipped_arrow", + "oozetarr": "oozing_tipped_arrow", + "oozetarrow": "oozing_tipped_arrow", + "oozetippedarrow": "oozing_tipped_arrow", + "oozingarrow": "oozing_tipped_arrow", + "oozingtarr": "oozing_tipped_arrow", + "oozingtarrow": "oozing_tipped_arrow", + "oozingtippedarrow": "oozing_tipped_arrow", "orange_banner": { "material": "ORANGE_BANNER" }, @@ -22503,6 +23098,12 @@ "minecraft:orange_bed": "orange_bed", "obed": "orange_bed", "orangebed": "orange_bed", + "orange_bundle": { + "material": "ORANGE_BUNDLE" + }, + "minecraft:orange_bundle": "orange_bundle", + "obundle": "orange_bundle", + "orangebundle": "orange_bundle", "orange_candle": { "material": "ORANGE_CANDLE" }, @@ -22639,6 +23240,83 @@ "moondaisy": "oxeye_daisy", "oxeye": "oxeye_daisy", "oxeyedaisy": "oxeye_daisy", + "oxidized_chiseled_copper": { + "material": "OXIDIZED_CHISELED_COPPER" + }, + "chiseledoxicoblock": "oxidized_chiseled_copper", + "chiseledoxicopblock": "oxidized_chiseled_copper", + "chiseledoxicopperblock": "oxidized_chiseled_copper", + "chiseledoxidisedcoblock": "oxidized_chiseled_copper", + "chiseledoxidisedcopblock": "oxidized_chiseled_copper", + "chiseledoxidisedcopperblock": "oxidized_chiseled_copper", + "chiseledoxidizedcoblock": "oxidized_chiseled_copper", + "chiseledoxidizedcopblock": "oxidized_chiseled_copper", + "chiseledoxidizedcopperblock": "oxidized_chiseled_copper", + "chiseledoxycoblock": "oxidized_chiseled_copper", + "chiseledoxycopblock": "oxidized_chiseled_copper", + "chiseledoxycopperblock": "oxidized_chiseled_copper", + "cioxicoblock": "oxidized_chiseled_copper", + "cioxicopblock": "oxidized_chiseled_copper", + "cioxicopperblock": "oxidized_chiseled_copper", + "cioxidisedcoblock": "oxidized_chiseled_copper", + "cioxidisedcopblock": "oxidized_chiseled_copper", + "cioxidisedcopperblock": "oxidized_chiseled_copper", + "cioxidizedcoblock": "oxidized_chiseled_copper", + "cioxidizedcopblock": "oxidized_chiseled_copper", + "cioxidizedcopperblock": "oxidized_chiseled_copper", + "cioxycoblock": "oxidized_chiseled_copper", + "cioxycopblock": "oxidized_chiseled_copper", + "cioxycopperblock": "oxidized_chiseled_copper", + "circleoxicoblock": "oxidized_chiseled_copper", + "circleoxicopblock": "oxidized_chiseled_copper", + "circleoxicopperblock": "oxidized_chiseled_copper", + "circleoxidisedcoblock": "oxidized_chiseled_copper", + "circleoxidisedcopblock": "oxidized_chiseled_copper", + "circleoxidisedcopperblock": "oxidized_chiseled_copper", + "circleoxidizedcoblock": "oxidized_chiseled_copper", + "circleoxidizedcopblock": "oxidized_chiseled_copper", + "circleoxidizedcopperblock": "oxidized_chiseled_copper", + "circleoxycoblock": "oxidized_chiseled_copper", + "circleoxycopblock": "oxidized_chiseled_copper", + "circleoxycopperblock": "oxidized_chiseled_copper", + "minecraft:oxidized_chiseled_copper": "oxidized_chiseled_copper", + "oxichiseledcoblock": "oxidized_chiseled_copper", + "oxichiseledcopblock": "oxidized_chiseled_copper", + "oxichiseledcopperblock": "oxidized_chiseled_copper", + "oxicicoblock": "oxidized_chiseled_copper", + "oxicicopblock": "oxidized_chiseled_copper", + "oxicicopperblock": "oxidized_chiseled_copper", + "oxicirclecoblock": "oxidized_chiseled_copper", + "oxicirclecopblock": "oxidized_chiseled_copper", + "oxicirclecopperblock": "oxidized_chiseled_copper", + "oxidisedchiseledcoblock": "oxidized_chiseled_copper", + "oxidisedchiseledcopblock": "oxidized_chiseled_copper", + "oxidisedchiseledcopperblock": "oxidized_chiseled_copper", + "oxidisedcicoblock": "oxidized_chiseled_copper", + "oxidisedcicopblock": "oxidized_chiseled_copper", + "oxidisedcicopperblock": "oxidized_chiseled_copper", + "oxidisedcirclecoblock": "oxidized_chiseled_copper", + "oxidisedcirclecopblock": "oxidized_chiseled_copper", + "oxidisedcirclecopperblock": "oxidized_chiseled_copper", + "oxidizedchiseledcoblock": "oxidized_chiseled_copper", + "oxidizedchiseledcopblock": "oxidized_chiseled_copper", + "oxidizedchiseledcopper": "oxidized_chiseled_copper", + "oxidizedchiseledcopperblock": "oxidized_chiseled_copper", + "oxidizedcicoblock": "oxidized_chiseled_copper", + "oxidizedcicopblock": "oxidized_chiseled_copper", + "oxidizedcicopperblock": "oxidized_chiseled_copper", + "oxidizedcirclecoblock": "oxidized_chiseled_copper", + "oxidizedcirclecopblock": "oxidized_chiseled_copper", + "oxidizedcirclecopperblock": "oxidized_chiseled_copper", + "oxychiseledcoblock": "oxidized_chiseled_copper", + "oxychiseledcopblock": "oxidized_chiseled_copper", + "oxychiseledcopperblock": "oxidized_chiseled_copper", + "oxycicoblock": "oxidized_chiseled_copper", + "oxycicopblock": "oxidized_chiseled_copper", + "oxycicopperblock": "oxidized_chiseled_copper", + "oxycirclecoblock": "oxidized_chiseled_copper", + "oxycirclecopblock": "oxidized_chiseled_copper", + "oxycirclecopperblock": "oxidized_chiseled_copper", "oxidized_copper": { "material": "OXIDIZED_COPPER" }, @@ -22656,6 +23334,70 @@ "oxycoblock": "oxidized_copper", "oxycopblock": "oxidized_copper", "oxycopperblock": "oxidized_copper", + "oxidized_copper_bulb": { + "material": "OXIDIZED_COPPER_BULB" + }, + "minecraft:oxidized_copper_bulb": "oxidized_copper_bulb", + "oxibulb": "oxidized_copper_bulb", + "oxidisedbulb": "oxidized_copper_bulb", + "oxidizedbulb": "oxidized_copper_bulb", + "oxidizedcopperbulb": "oxidized_copper_bulb", + "oxybulb": "oxidized_copper_bulb", + "oxidized_copper_door": { + "material": "OXIDIZED_COPPER_DOOR" + }, + "dooroxi": "oxidized_copper_door", + "dooroxidised": "oxidized_copper_door", + "dooroxidized": "oxidized_copper_door", + "dooroxy": "oxidized_copper_door", + "minecraft:oxidized_copper_door": "oxidized_copper_door", + "oxidiseddoor": "oxidized_copper_door", + "oxidizedcopperdoor": "oxidized_copper_door", + "oxidizeddoor": "oxidized_copper_door", + "oxidoor": "oxidized_copper_door", + "oxydoor": "oxidized_copper_door", + "oxidized_copper_grate": { + "material": "OXIDIZED_COPPER_GRATE" + }, + "minecraft:oxidized_copper_grate": "oxidized_copper_grate", + "oxidisedgrate": "oxidized_copper_grate", + "oxidizedcoppergrate": "oxidized_copper_grate", + "oxidizedgrate": "oxidized_copper_grate", + "oxigrate": "oxidized_copper_grate", + "oxygrate": "oxidized_copper_grate", + "oxidized_copper_trapdoor": { + "material": "OXIDIZED_COPPER_TRAPDOOR" + }, + "minecraft:oxidized_copper_trapdoor": "oxidized_copper_trapdoor", + "oxidiseddoort": "oxidized_copper_trapdoor", + "oxidiseddoortrap": "oxidized_copper_trapdoor", + "oxidiseddtrap": "oxidized_copper_trapdoor", + "oxidisedhatch": "oxidized_copper_trapdoor", + "oxidisedtdoor": "oxidized_copper_trapdoor", + "oxidisedtrapd": "oxidized_copper_trapdoor", + "oxidisedtrapdoor": "oxidized_copper_trapdoor", + "oxidizedcoppertrapdoor": "oxidized_copper_trapdoor", + "oxidizeddoort": "oxidized_copper_trapdoor", + "oxidizeddoortrap": "oxidized_copper_trapdoor", + "oxidizeddtrap": "oxidized_copper_trapdoor", + "oxidizedhatch": "oxidized_copper_trapdoor", + "oxidizedtdoor": "oxidized_copper_trapdoor", + "oxidizedtrapd": "oxidized_copper_trapdoor", + "oxidizedtrapdoor": "oxidized_copper_trapdoor", + "oxidoort": "oxidized_copper_trapdoor", + "oxidoortrap": "oxidized_copper_trapdoor", + "oxidtrap": "oxidized_copper_trapdoor", + "oxihatch": "oxidized_copper_trapdoor", + "oxitdoor": "oxidized_copper_trapdoor", + "oxitrapd": "oxidized_copper_trapdoor", + "oxitrapdoor": "oxidized_copper_trapdoor", + "oxydoort": "oxidized_copper_trapdoor", + "oxydoortrap": "oxidized_copper_trapdoor", + "oxydtrap": "oxidized_copper_trapdoor", + "oxyhatch": "oxidized_copper_trapdoor", + "oxytdoor": "oxidized_copper_trapdoor", + "oxytrapd": "oxidized_copper_trapdoor", + "oxytrapdoor": "oxidized_copper_trapdoor", "oxidized_cut_copper": { "material": "OXIDIZED_CUT_COPPER" }, @@ -23374,6 +24116,12 @@ "minecraft:pink_bed": "pink_bed", "pibed": "pink_bed", "pinkbed": "pink_bed", + "pink_bundle": { + "material": "PINK_BUNDLE" + }, + "minecraft:pink_bundle": "pink_bundle", + "pibundle": "pink_bundle", + "pinkbundle": "pink_bundle", "pink_candle": { "material": "PINK_CANDLE" }, @@ -24228,6 +24976,63 @@ "polishedgrstairs": "polished_granite_stairs", "polishedgstonestair": "polished_granite_stairs", "polishedgstonestairs": "polished_granite_stairs", + "polished_tuff": { + "material": "POLISHED_TUFF" + }, + "minecraft:polished_tuff": "polished_tuff", + "polishedtuf": "polished_tuff", + "polishedtufb": "polished_tuff", + "polishedtufbl": "polished_tuff", + "polishedtufblock": "polished_tuff", + "polishedtuff": "polished_tuff", + "polishedtuffb": "polished_tuff", + "polishedtuffbl": "polished_tuff", + "polishedtuffblock": "polished_tuff", + "ptuf": "polished_tuff", + "ptufb": "polished_tuff", + "ptufbl": "polished_tuff", + "ptufblock": "polished_tuff", + "ptuff": "polished_tuff", + "ptuffb": "polished_tuff", + "ptuffbl": "polished_tuff", + "ptuffblock": "polished_tuff", + "polished_tuff_slab": { + "material": "POLISHED_TUFF_SLAB" + }, + "minecraft:polished_tuff_slab": "polished_tuff_slab", + "polishedtuffhalfblock": "polished_tuff_slab", + "polishedtuffslab": "polished_tuff_slab", + "polishedtuffstep": "polished_tuff_slab", + "polishedtufhalfblock": "polished_tuff_slab", + "polishedtufstep": "polished_tuff_slab", + "ptuffhalfblock": "polished_tuff_slab", + "ptuffstep": "polished_tuff_slab", + "ptufhalfblock": "polished_tuff_slab", + "ptufstep": "polished_tuff_slab", + "polished_tuff_stairs": { + "material": "POLISHED_TUFF_STAIRS" + }, + "minecraft:polished_tuff_stairs": "polished_tuff_stairs", + "polishedtuffstair": "polished_tuff_stairs", + "polishedtuffstairs": "polished_tuff_stairs", + "polishedtufstair": "polished_tuff_stairs", + "polishedtufstairs": "polished_tuff_stairs", + "ptuffstair": "polished_tuff_stairs", + "ptuffstairs": "polished_tuff_stairs", + "ptufstair": "polished_tuff_stairs", + "ptufstairs": "polished_tuff_stairs", + "polished_tuff_wall": { + "material": "POLISHED_TUFF_WALL" + }, + "minecraft:polished_tuff_wall": "polished_tuff_wall", + "polishedtuffwall": "polished_tuff_wall", + "polishedtufwall": "polished_tuff_wall", + "ptuffwall": "polished_tuff_wall", + "ptufwall": "polished_tuff_wall", + "wallpolishedtuf": "polished_tuff_wall", + "wallpolishedtuff": "polished_tuff_wall", + "wallptuf": "polished_tuff_wall", + "wallptuff": "polished_tuff_wall", "popped_chorus_fruit": { "material": "POPPED_CHORUS_FRUIT" }, @@ -24563,6 +25368,12 @@ "minecraft:purple_bed": "purple_bed", "pubed": "purple_bed", "purplebed": "purple_bed", + "purple_bundle": { + "material": "PURPLE_BUNDLE" + }, + "minecraft:purple_bundle": "purple_bundle", + "pubundle": "purple_bundle", + "purplebundle": "purple_bundle", "purple_candle": { "material": "PURPLE_CANDLE" }, @@ -25006,6 +25817,12 @@ "minecraft:red_bed": "red_bed", "rbed": "red_bed", "redbed": "red_bed", + "red_bundle": { + "material": "RED_BUNDLE" + }, + "minecraft:red_bundle": "red_bundle", + "rbundle": "red_bundle", + "redbundle": "red_bundle", "red_candle": { "material": "RED_CANDLE" }, @@ -25337,7 +26154,8 @@ "rstorch": "redstone_torch", "regeneration_lingering_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25387,7 +26205,8 @@ "regenlingerpot": "regeneration_lingering_potion", "regeneration_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25407,7 +26226,8 @@ "regenpotion": "regeneration_potion", "regeneration_splash_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25433,7 +26253,8 @@ "splregenpotion": "regeneration_splash_potion", "regeneration_tipped_arrow": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25657,6 +26478,12 @@ "material": "SCAFFOLDING" }, "minecraft:scaffolding": "scaffolding", + "scrape_pottery_sherd": { + "material": "SCRAPE_POTTERY_SHERD" + }, + "minecraft:scrape_pottery_sherd": "scrape_pottery_sherd", + "scrapepotterysherd": "scrape_pottery_sherd", + "scrapesherd": "scrape_pottery_sherd", "sculk": { "material": "SCULK" }, @@ -25689,10 +26516,6 @@ "minecraft:sculk_vein": "sculk_vein", "sculkvein": "sculk_vein", "scvein": "sculk_vein", - "scute": { - "material": "SCUTE" - }, - "minecraft:scute": "scute", "sea_lantern": { "material": "SEA_LANTERN" }, @@ -26594,40 +27417,80 @@ "snow_golem_spawn_egg": { "material": "SNOW_GOLEM_SPAWN_EGG" }, + "eggsgolem": "snow_golem_spawn_egg", + "eggsnow_golem": "snow_golem_spawn_egg", + "eggsnowgolem": "snow_golem_spawn_egg", + "eggsnowman": "snow_golem_spawn_egg", "minecraft:snow_golem_spawn_egg": "snow_golem_spawn_egg", + "seggsgolem": "snow_golem_spawn_egg", + "seggsnow_golem": "snow_golem_spawn_egg", + "seggsnowgolem": "snow_golem_spawn_egg", + "seggsnowman": "snow_golem_spawn_egg", + "sgolemegg": "snow_golem_spawn_egg", + "sgolemsegg": "snow_golem_spawn_egg", + "sgolemspawn": "snow_golem_spawn_egg", + "sgolemspawnegg": "snow_golem_spawn_egg", + "snow_golemegg": "snow_golem_spawn_egg", + "snow_golemsegg": "snow_golem_spawn_egg", + "snow_golemspawn": "snow_golem_spawn_egg", + "snow_golemspawnegg": "snow_golem_spawn_egg", + "snowgolemegg": "snow_golem_spawn_egg", + "snowgolemsegg": "snow_golem_spawn_egg", + "snowgolemspawn": "snow_golem_spawn_egg", "snowgolemspawnegg": "snow_golem_spawn_egg", + "snowmanegg": "snow_golem_spawn_egg", + "snowmansegg": "snow_golem_spawn_egg", + "snowmanspawn": "snow_golem_spawn_egg", + "snowmanspawnegg": "snow_golem_spawn_egg", + "spawneggsgolem": "snow_golem_spawn_egg", + "spawneggsnow_golem": "snow_golem_spawn_egg", + "spawneggsnowgolem": "snow_golem_spawn_egg", + "spawneggsnowman": "snow_golem_spawn_egg", + "spawnsgolem": "snow_golem_spawn_egg", + "spawnsnow_golem": "snow_golem_spawn_egg", + "spawnsnowgolem": "snow_golem_spawn_egg", + "spawnsnowman": "snow_golem_spawn_egg", + "snow_golem_spawner": { + "entity": "SNOW_GOLEM", + "material": "SPAWNER" + }, + "sgolemcage": "snow_golem_spawner", + "sgolemmcage": "snow_golem_spawner", + "sgolemmobcage": "snow_golem_spawner", + "sgolemmobspawner": "snow_golem_spawner", + "sgolemmonstercage": "snow_golem_spawner", + "sgolemmonsterspawner": "snow_golem_spawner", + "sgolemmspawner": "snow_golem_spawner", + "sgolemspawner": "snow_golem_spawner", + "snow_golemcage": "snow_golem_spawner", + "snow_golemmcage": "snow_golem_spawner", + "snow_golemmobcage": "snow_golem_spawner", + "snow_golemmobspawner": "snow_golem_spawner", + "snow_golemmonstercage": "snow_golem_spawner", + "snow_golemmonsterspawner": "snow_golem_spawner", + "snow_golemmspawner": "snow_golem_spawner", + "snow_golemspawner": "snow_golem_spawner", + "snowgolemcage": "snow_golem_spawner", + "snowgolemmcage": "snow_golem_spawner", + "snowgolemmobcage": "snow_golem_spawner", + "snowgolemmobspawner": "snow_golem_spawner", + "snowgolemmonstercage": "snow_golem_spawner", + "snowgolemmonsterspawner": "snow_golem_spawner", + "snowgolemmspawner": "snow_golem_spawner", + "snowgolemspawner": "snow_golem_spawner", + "snowman_spawner": "snow_golem_spawner", + "snowmancage": "snow_golem_spawner", + "snowmanmcage": "snow_golem_spawner", + "snowmanmobcage": "snow_golem_spawner", + "snowmanmobspawner": "snow_golem_spawner", + "snowmanmonstercage": "snow_golem_spawner", + "snowmanmonsterspawner": "snow_golem_spawner", + "snowmanmspawner": "snow_golem_spawner", + "snowmanspawner": "snow_golem_spawner", "snowball": { "material": "SNOWBALL" }, "minecraft:snowball": "snowball", - "snowman_spawner": { - "entity": "SNOWMAN", - "material": "SPAWNER" - }, - "sgolemcage": "snowman_spawner", - "sgolemmcage": "snowman_spawner", - "sgolemmobcage": "snowman_spawner", - "sgolemmobspawner": "snowman_spawner", - "sgolemmonstercage": "snowman_spawner", - "sgolemmonsterspawner": "snowman_spawner", - "sgolemmspawner": "snowman_spawner", - "sgolemspawner": "snowman_spawner", - "snowgolemcage": "snowman_spawner", - "snowgolemmcage": "snowman_spawner", - "snowgolemmobcage": "snowman_spawner", - "snowgolemmobspawner": "snowman_spawner", - "snowgolemmonstercage": "snowman_spawner", - "snowgolemmonsterspawner": "snowman_spawner", - "snowgolemmspawner": "snowman_spawner", - "snowgolemspawner": "snowman_spawner", - "snowmancage": "snowman_spawner", - "snowmanmcage": "snowman_spawner", - "snowmanmobcage": "snowman_spawner", - "snowmanmobspawner": "snowman_spawner", - "snowmanmonstercage": "snowman_spawner", - "snowmanmonsterspawner": "snowman_spawner", - "snowmanmspawner": "snowman_spawner", - "snowmanspawner": "snowman_spawner", "soul_campfire": { "material": "SOUL_CAMPFIRE" }, @@ -28408,7 +29271,8 @@ "warpstrippedlog": "stripped_warped_stem", "strong_harming_lingering_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28626,7 +29490,8 @@ "lingerpotinstantdamagestrong": "strong_harming_lingering_potion", "strong_harming_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28694,7 +29559,8 @@ "potofinstantdamagestrong": "strong_harming_potion", "strong_harming_splash_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28792,7 +29658,8 @@ "splinstantdamagestrongpotion": "strong_harming_splash_potion", "strong_harming_tipped_arrow": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28875,7 +29742,8 @@ "instantdamagestrongtippedarrow": "strong_harming_tipped_arrow", "strong_healing_lingering_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": true, "extended": false }, @@ -29093,7 +29961,8 @@ "lingerpotlifestrong": "strong_healing_lingering_potion", "strong_healing_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": true, "extended": false }, @@ -29161,7 +30030,8 @@ "potoflifestrong": "strong_healing_potion", "strong_healing_splash_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": true, "extended": false }, @@ -29259,7 +30129,8 @@ "spllifestrongpotion": "strong_healing_splash_potion", "strong_healing_tipped_arrow": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": true, "extended": false }, @@ -29342,7 +30213,8 @@ "lifestrongtippedarrow": "strong_healing_tipped_arrow", "strong_leaping_lingering_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29476,7 +30348,8 @@ "lingerpotleapstrong": "strong_leaping_lingering_potion", "strong_leaping_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29520,7 +30393,8 @@ "potofleapstrong": "strong_leaping_potion", "strong_leaping_splash_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29582,7 +30456,8 @@ "splleapstrongpotion": "strong_leaping_splash_potion", "strong_leaping_tipped_arrow": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29928,7 +30803,8 @@ "pstrongtippedarrow": "strong_poison_tipped_arrow", "strong_regeneration_lingering_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30062,7 +30938,8 @@ "regenlingerpotstrong": "strong_regeneration_lingering_potion", "strong_regeneration_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30106,7 +30983,8 @@ "regenstrongpotion": "strong_regeneration_potion", "strong_regeneration_splash_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30168,7 +31046,8 @@ "splregenstrongpotion": "strong_regeneration_splash_potion", "strong_regeneration_tipped_arrow": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30720,7 +31599,8 @@ "strstrongtippedarrow": "strong_strength_tipped_arrow", "strong_swiftness_lingering_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -30854,7 +31734,8 @@ "swiftnesslingerpotstrong": "strong_swiftness_lingering_potion", "strong_swiftness_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -30898,7 +31779,8 @@ "swiftstrongpotion": "strong_swiftness_potion", "strong_swiftness_splash_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -30960,7 +31842,8 @@ "swiftstrongsplashpotion": "strong_swiftness_splash_potion", "strong_swiftness_tipped_arrow": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -31353,7 +32236,8 @@ "sweetberries": "sweet_berries", "swiftness_lingering_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31403,7 +32287,8 @@ "swiftnesslingerpot": "swiftness_lingering_potion", "swiftness_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31423,7 +32308,8 @@ "swiftpotion": "swiftness_potion", "swiftness_splash_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31449,7 +32335,8 @@ "swiftsplashpotion": "swiftness_splash_potion", "swiftness_tipped_arrow": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31720,6 +32607,16 @@ "minecraft:trapped_chest": "trapped_chest", "trapchest": "trapped_chest", "trappedchest": "trapped_chest", + "trial_key": { + "material": "TRIAL_KEY" + }, + "minecraft:trial_key": "trial_key", + "trialkey": "trial_key", + "trial_spawner": { + "material": "TRIAL_SPAWNER" + }, + "minecraft:trial_spawner": "trial_spawner", + "trialspawner": "trial_spawner", "trident": { "material": "TRIDENT" }, @@ -31854,6 +32751,49 @@ "material": "TUFF" }, "minecraft:tuff": "tuff", + "tuf": "tuff", + "tufb": "tuff", + "tufbl": "tuff", + "tufblock": "tuff", + "tuffb": "tuff", + "tuffbl": "tuff", + "tuffblock": "tuff", + "tuff_brick_slab": { + "material": "TUFF_BRICK_SLAB" + }, + "minecraft:tuff_brick_slab": "tuff_brick_slab", + "tuffbrickslab": "tuff_brick_slab", + "tuff_brick_stairs": { + "material": "TUFF_BRICK_STAIRS" + }, + "minecraft:tuff_brick_stairs": "tuff_brick_stairs", + "tuffbrickstairs": "tuff_brick_stairs", + "tuff_brick_wall": { + "material": "TUFF_BRICK_WALL" + }, + "minecraft:tuff_brick_wall": "tuff_brick_wall", + "tuffbrickwall": "tuff_brick_wall", + "tuff_bricks": { + "material": "TUFF_BRICKS" + }, + "minecraft:tuff_bricks": "tuff_bricks", + "tuffbr": "tuff_bricks", + "tuffbricks": "tuff_bricks", + "tuff_slab": { + "material": "TUFF_SLAB" + }, + "minecraft:tuff_slab": "tuff_slab", + "tuffslab": "tuff_slab", + "tuff_stairs": { + "material": "TUFF_STAIRS" + }, + "minecraft:tuff_stairs": "tuff_stairs", + "tuffstairs": "tuff_stairs", + "tuff_wall": { + "material": "TUFF_WALL" + }, + "minecraft:tuff_wall": "tuff_wall", + "tuffwall": "tuff_wall", "turtle_egg": { "material": "TURTLE_EGG" }, @@ -31983,6 +32923,13 @@ "turtletarr": "turtle_master_tipped_arrow", "turtletarrow": "turtle_master_tipped_arrow", "turtletippedarrow": "turtle_master_tipped_arrow", + "turtle_scute": { + "material": "TURTLE_SCUTE" + }, + "minecraft:scute": "turtle_scute", + "minecraft:turtle_scute": "turtle_scute", + "scute": "turtle_scute", + "turtlescute": "turtle_scute", "turtle_spawn_egg": { "material": "TURTLE_SPAWN_EGG" }, @@ -32013,6 +32960,10 @@ "twistingvines": "twisting_vines", "twistvine": "twisting_vines", "twistvines": "twisting_vines", + "vault": { + "material": "VAULT" + }, + "minecraft:vault": "vault", "verdant_froglight": { "material": "VERDANT_FROGLIGHT" }, @@ -32668,6 +33619,65 @@ "watertarr": "water_tipped_arrow", "watertarrow": "water_tipped_arrow", "watertippedarrow": "water_tipped_arrow", + "waxed_chiseled_copper": { + "material": "WAXED_CHISELED_COPPER" + }, + "chiseledwacoblock": "waxed_chiseled_copper", + "chiseledwacopblock": "waxed_chiseled_copper", + "chiseledwacopperblock": "waxed_chiseled_copper", + "chiseledwaxcoblock": "waxed_chiseled_copper", + "chiseledwaxcopblock": "waxed_chiseled_copper", + "chiseledwaxcopperblock": "waxed_chiseled_copper", + "chiseledwaxedcoblock": "waxed_chiseled_copper", + "chiseledwaxedcopblock": "waxed_chiseled_copper", + "chiseledwaxedcopperblock": "waxed_chiseled_copper", + "circlewacoblock": "waxed_chiseled_copper", + "circlewacopblock": "waxed_chiseled_copper", + "circlewacopperblock": "waxed_chiseled_copper", + "circlewaxcoblock": "waxed_chiseled_copper", + "circlewaxcopblock": "waxed_chiseled_copper", + "circlewaxcopperblock": "waxed_chiseled_copper", + "circlewaxedcoblock": "waxed_chiseled_copper", + "circlewaxedcopblock": "waxed_chiseled_copper", + "circlewaxedcopperblock": "waxed_chiseled_copper", + "ciwacoblock": "waxed_chiseled_copper", + "ciwacopblock": "waxed_chiseled_copper", + "ciwacopperblock": "waxed_chiseled_copper", + "ciwaxcoblock": "waxed_chiseled_copper", + "ciwaxcopblock": "waxed_chiseled_copper", + "ciwaxcopperblock": "waxed_chiseled_copper", + "ciwaxedcoblock": "waxed_chiseled_copper", + "ciwaxedcopblock": "waxed_chiseled_copper", + "ciwaxedcopperblock": "waxed_chiseled_copper", + "minecraft:waxed_chiseled_copper": "waxed_chiseled_copper", + "wachiseledcoblock": "waxed_chiseled_copper", + "wachiseledcopblock": "waxed_chiseled_copper", + "wachiseledcopperblock": "waxed_chiseled_copper", + "wacicoblock": "waxed_chiseled_copper", + "wacicopblock": "waxed_chiseled_copper", + "wacicopperblock": "waxed_chiseled_copper", + "wacirclecoblock": "waxed_chiseled_copper", + "wacirclecopblock": "waxed_chiseled_copper", + "wacirclecopperblock": "waxed_chiseled_copper", + "waxchiseledcoblock": "waxed_chiseled_copper", + "waxchiseledcopblock": "waxed_chiseled_copper", + "waxchiseledcopperblock": "waxed_chiseled_copper", + "waxcicoblock": "waxed_chiseled_copper", + "waxcicopblock": "waxed_chiseled_copper", + "waxcicopperblock": "waxed_chiseled_copper", + "waxcirclecoblock": "waxed_chiseled_copper", + "waxcirclecopblock": "waxed_chiseled_copper", + "waxcirclecopperblock": "waxed_chiseled_copper", + "waxedchiseledcoblock": "waxed_chiseled_copper", + "waxedchiseledcopblock": "waxed_chiseled_copper", + "waxedchiseledcopper": "waxed_chiseled_copper", + "waxedchiseledcopperblock": "waxed_chiseled_copper", + "waxedcicoblock": "waxed_chiseled_copper", + "waxedcicopblock": "waxed_chiseled_copper", + "waxedcicopperblock": "waxed_chiseled_copper", + "waxedcirclecoblock": "waxed_chiseled_copper", + "waxedcirclecopblock": "waxed_chiseled_copper", + "waxedcirclecopperblock": "waxed_chiseled_copper", "waxed_copper_block": { "material": "WAXED_COPPER_BLOCK" }, @@ -32681,6 +33691,59 @@ "waxedcoblock": "waxed_copper_block", "waxedcopblock": "waxed_copper_block", "waxedcopperblock": "waxed_copper_block", + "waxed_copper_bulb": { + "material": "WAXED_COPPER_BULB" + }, + "minecraft:waxed_copper_bulb": "waxed_copper_bulb", + "wabulb": "waxed_copper_bulb", + "waxbulb": "waxed_copper_bulb", + "waxedbulb": "waxed_copper_bulb", + "waxedcopperbulb": "waxed_copper_bulb", + "waxed_copper_door": { + "material": "WAXED_COPPER_DOOR" + }, + "doorwa": "waxed_copper_door", + "doorwax": "waxed_copper_door", + "doorwaxed": "waxed_copper_door", + "minecraft:waxed_copper_door": "waxed_copper_door", + "wadoor": "waxed_copper_door", + "waxdoor": "waxed_copper_door", + "waxedcopperdoor": "waxed_copper_door", + "waxeddoor": "waxed_copper_door", + "waxed_copper_grate": { + "material": "WAXED_COPPER_GRATE" + }, + "minecraft:waxed_copper_grate": "waxed_copper_grate", + "wagrate": "waxed_copper_grate", + "waxedcoppergrate": "waxed_copper_grate", + "waxedgrate": "waxed_copper_grate", + "waxgrate": "waxed_copper_grate", + "waxed_copper_trapdoor": { + "material": "WAXED_COPPER_TRAPDOOR" + }, + "minecraft:waxed_copper_trapdoor": "waxed_copper_trapdoor", + "wadoort": "waxed_copper_trapdoor", + "wadoortrap": "waxed_copper_trapdoor", + "wadtrap": "waxed_copper_trapdoor", + "wahatch": "waxed_copper_trapdoor", + "watdoor": "waxed_copper_trapdoor", + "watrapd": "waxed_copper_trapdoor", + "watrapdoor": "waxed_copper_trapdoor", + "waxdoort": "waxed_copper_trapdoor", + "waxdoortrap": "waxed_copper_trapdoor", + "waxdtrap": "waxed_copper_trapdoor", + "waxedcoppertrapdoor": "waxed_copper_trapdoor", + "waxeddoort": "waxed_copper_trapdoor", + "waxeddoortrap": "waxed_copper_trapdoor", + "waxeddtrap": "waxed_copper_trapdoor", + "waxedhatch": "waxed_copper_trapdoor", + "waxedtdoor": "waxed_copper_trapdoor", + "waxedtrapd": "waxed_copper_trapdoor", + "waxedtrapdoor": "waxed_copper_trapdoor", + "waxhatch": "waxed_copper_trapdoor", + "waxtdoor": "waxed_copper_trapdoor", + "waxtrapd": "waxed_copper_trapdoor", + "waxtrapdoor": "waxed_copper_trapdoor", "waxed_cut_copper": { "material": "WAXED_CUT_COPPER" }, @@ -32946,6 +34009,497 @@ "waxedcutcopstairs": "waxed_cut_copper_stairs", "waxedcutcostair": "waxed_cut_copper_stairs", "waxedcutcostairs": "waxed_cut_copper_stairs", + "waxed_exposed_chiseled_copper": { + "material": "WAXED_EXPOSED_CHISELED_COPPER" + }, + "chiseledexposedwacoblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwacopblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwacopperblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwaxcoblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwaxcopblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwaxcopperblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwaxedcoblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwaxedcopblock": "waxed_exposed_chiseled_copper", + "chiseledexposedwaxedcopperblock": "waxed_exposed_chiseled_copper", + "chiseledexpwacoblock": "waxed_exposed_chiseled_copper", + "chiseledexpwacopblock": "waxed_exposed_chiseled_copper", + "chiseledexpwacopperblock": "waxed_exposed_chiseled_copper", + "chiseledexpwaxcoblock": "waxed_exposed_chiseled_copper", + "chiseledexpwaxcopblock": "waxed_exposed_chiseled_copper", + "chiseledexpwaxcopperblock": "waxed_exposed_chiseled_copper", + "chiseledexpwaxedcoblock": "waxed_exposed_chiseled_copper", + "chiseledexpwaxedcopblock": "waxed_exposed_chiseled_copper", + "chiseledexpwaxedcopperblock": "waxed_exposed_chiseled_copper", + "chiseledexwacoblock": "waxed_exposed_chiseled_copper", + "chiseledexwacopblock": "waxed_exposed_chiseled_copper", + "chiseledexwacopperblock": "waxed_exposed_chiseled_copper", + "chiseledexwaxcoblock": "waxed_exposed_chiseled_copper", + "chiseledexwaxcopblock": "waxed_exposed_chiseled_copper", + "chiseledexwaxcopperblock": "waxed_exposed_chiseled_copper", + "chiseledexwaxedcoblock": "waxed_exposed_chiseled_copper", + "chiseledexwaxedcopblock": "waxed_exposed_chiseled_copper", + "chiseledexwaxedcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaexcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaexcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaexcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaexpcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaexpcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaexpcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaexposedcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaexposedcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaexposedcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexpcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexpcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexpcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexposedcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexposedcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaxedexposedcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexpcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexpcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexpcopperblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexposedcoblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexposedcopblock": "waxed_exposed_chiseled_copper", + "chiseledwaxexposedcopperblock": "waxed_exposed_chiseled_copper", + "ciexposedwacoblock": "waxed_exposed_chiseled_copper", + "ciexposedwacopblock": "waxed_exposed_chiseled_copper", + "ciexposedwacopperblock": "waxed_exposed_chiseled_copper", + "ciexposedwaxcoblock": "waxed_exposed_chiseled_copper", + "ciexposedwaxcopblock": "waxed_exposed_chiseled_copper", + "ciexposedwaxcopperblock": "waxed_exposed_chiseled_copper", + "ciexposedwaxedcoblock": "waxed_exposed_chiseled_copper", + "ciexposedwaxedcopblock": "waxed_exposed_chiseled_copper", + "ciexposedwaxedcopperblock": "waxed_exposed_chiseled_copper", + "ciexpwacoblock": "waxed_exposed_chiseled_copper", + "ciexpwacopblock": "waxed_exposed_chiseled_copper", + "ciexpwacopperblock": "waxed_exposed_chiseled_copper", + "ciexpwaxcoblock": "waxed_exposed_chiseled_copper", + "ciexpwaxcopblock": "waxed_exposed_chiseled_copper", + "ciexpwaxcopperblock": "waxed_exposed_chiseled_copper", + "ciexpwaxedcoblock": "waxed_exposed_chiseled_copper", + "ciexpwaxedcopblock": "waxed_exposed_chiseled_copper", + "ciexpwaxedcopperblock": "waxed_exposed_chiseled_copper", + "ciexwacoblock": "waxed_exposed_chiseled_copper", + "ciexwacopblock": "waxed_exposed_chiseled_copper", + "ciexwacopperblock": "waxed_exposed_chiseled_copper", + "ciexwaxcoblock": "waxed_exposed_chiseled_copper", + "ciexwaxcopblock": "waxed_exposed_chiseled_copper", + "ciexwaxcopperblock": "waxed_exposed_chiseled_copper", + "ciexwaxedcoblock": "waxed_exposed_chiseled_copper", + "ciexwaxedcopblock": "waxed_exposed_chiseled_copper", + "ciexwaxedcopperblock": "waxed_exposed_chiseled_copper", + "circleexposedwacoblock": "waxed_exposed_chiseled_copper", + "circleexposedwacopblock": "waxed_exposed_chiseled_copper", + "circleexposedwacopperblock": "waxed_exposed_chiseled_copper", + "circleexposedwaxcoblock": "waxed_exposed_chiseled_copper", + "circleexposedwaxcopblock": "waxed_exposed_chiseled_copper", + "circleexposedwaxcopperblock": "waxed_exposed_chiseled_copper", + "circleexposedwaxedcoblock": "waxed_exposed_chiseled_copper", + "circleexposedwaxedcopblock": "waxed_exposed_chiseled_copper", + "circleexposedwaxedcopperblock": "waxed_exposed_chiseled_copper", + "circleexpwacoblock": "waxed_exposed_chiseled_copper", + "circleexpwacopblock": "waxed_exposed_chiseled_copper", + "circleexpwacopperblock": "waxed_exposed_chiseled_copper", + "circleexpwaxcoblock": "waxed_exposed_chiseled_copper", + "circleexpwaxcopblock": "waxed_exposed_chiseled_copper", + "circleexpwaxcopperblock": "waxed_exposed_chiseled_copper", + "circleexpwaxedcoblock": "waxed_exposed_chiseled_copper", + "circleexpwaxedcopblock": "waxed_exposed_chiseled_copper", + "circleexpwaxedcopperblock": "waxed_exposed_chiseled_copper", + "circleexwacoblock": "waxed_exposed_chiseled_copper", + "circleexwacopblock": "waxed_exposed_chiseled_copper", + "circleexwacopperblock": "waxed_exposed_chiseled_copper", + "circleexwaxcoblock": "waxed_exposed_chiseled_copper", + "circleexwaxcopblock": "waxed_exposed_chiseled_copper", + "circleexwaxcopperblock": "waxed_exposed_chiseled_copper", + "circleexwaxedcoblock": "waxed_exposed_chiseled_copper", + "circleexwaxedcopblock": "waxed_exposed_chiseled_copper", + "circleexwaxedcopperblock": "waxed_exposed_chiseled_copper", + "circlewaexcoblock": "waxed_exposed_chiseled_copper", + "circlewaexcopblock": "waxed_exposed_chiseled_copper", + "circlewaexcopperblock": "waxed_exposed_chiseled_copper", + "circlewaexpcoblock": "waxed_exposed_chiseled_copper", + "circlewaexpcopblock": "waxed_exposed_chiseled_copper", + "circlewaexpcopperblock": "waxed_exposed_chiseled_copper", + "circlewaexposedcoblock": "waxed_exposed_chiseled_copper", + "circlewaexposedcopblock": "waxed_exposed_chiseled_copper", + "circlewaexposedcopperblock": "waxed_exposed_chiseled_copper", + "circlewaxedexcoblock": "waxed_exposed_chiseled_copper", + "circlewaxedexcopblock": "waxed_exposed_chiseled_copper", + "circlewaxedexcopperblock": "waxed_exposed_chiseled_copper", + "circlewaxedexpcoblock": "waxed_exposed_chiseled_copper", + "circlewaxedexpcopblock": "waxed_exposed_chiseled_copper", + "circlewaxedexpcopperblock": "waxed_exposed_chiseled_copper", + "circlewaxedexposedcoblock": "waxed_exposed_chiseled_copper", + "circlewaxedexposedcopblock": "waxed_exposed_chiseled_copper", + "circlewaxedexposedcopperblock": "waxed_exposed_chiseled_copper", + "circlewaxexcoblock": "waxed_exposed_chiseled_copper", + "circlewaxexcopblock": "waxed_exposed_chiseled_copper", + "circlewaxexcopperblock": "waxed_exposed_chiseled_copper", + "circlewaxexpcoblock": "waxed_exposed_chiseled_copper", + "circlewaxexpcopblock": "waxed_exposed_chiseled_copper", + "circlewaxexpcopperblock": "waxed_exposed_chiseled_copper", + "circlewaxexposedcoblock": "waxed_exposed_chiseled_copper", + "circlewaxexposedcopblock": "waxed_exposed_chiseled_copper", + "circlewaxexposedcopperblock": "waxed_exposed_chiseled_copper", + "ciwaexcoblock": "waxed_exposed_chiseled_copper", + "ciwaexcopblock": "waxed_exposed_chiseled_copper", + "ciwaexcopperblock": "waxed_exposed_chiseled_copper", + "ciwaexpcoblock": "waxed_exposed_chiseled_copper", + "ciwaexpcopblock": "waxed_exposed_chiseled_copper", + "ciwaexpcopperblock": "waxed_exposed_chiseled_copper", + "ciwaexposedcoblock": "waxed_exposed_chiseled_copper", + "ciwaexposedcopblock": "waxed_exposed_chiseled_copper", + "ciwaexposedcopperblock": "waxed_exposed_chiseled_copper", + "ciwaxedexcoblock": "waxed_exposed_chiseled_copper", + "ciwaxedexcopblock": "waxed_exposed_chiseled_copper", + "ciwaxedexcopperblock": "waxed_exposed_chiseled_copper", + "ciwaxedexpcoblock": "waxed_exposed_chiseled_copper", + "ciwaxedexpcopblock": "waxed_exposed_chiseled_copper", + "ciwaxedexpcopperblock": "waxed_exposed_chiseled_copper", + "ciwaxedexposedcoblock": "waxed_exposed_chiseled_copper", + "ciwaxedexposedcopblock": "waxed_exposed_chiseled_copper", + "ciwaxedexposedcopperblock": "waxed_exposed_chiseled_copper", + "ciwaxexcoblock": "waxed_exposed_chiseled_copper", + "ciwaxexcopblock": "waxed_exposed_chiseled_copper", + "ciwaxexcopperblock": "waxed_exposed_chiseled_copper", + "ciwaxexpcoblock": "waxed_exposed_chiseled_copper", + "ciwaxexpcopblock": "waxed_exposed_chiseled_copper", + "ciwaxexpcopperblock": "waxed_exposed_chiseled_copper", + "ciwaxexposedcoblock": "waxed_exposed_chiseled_copper", + "ciwaxexposedcopblock": "waxed_exposed_chiseled_copper", + "ciwaxexposedcopperblock": "waxed_exposed_chiseled_copper", + "exchiseledwacoblock": "waxed_exposed_chiseled_copper", + "exchiseledwacopblock": "waxed_exposed_chiseled_copper", + "exchiseledwacopperblock": "waxed_exposed_chiseled_copper", + "exchiseledwaxcoblock": "waxed_exposed_chiseled_copper", + "exchiseledwaxcopblock": "waxed_exposed_chiseled_copper", + "exchiseledwaxcopperblock": "waxed_exposed_chiseled_copper", + "exchiseledwaxedcoblock": "waxed_exposed_chiseled_copper", + "exchiseledwaxedcopblock": "waxed_exposed_chiseled_copper", + "exchiseledwaxedcopperblock": "waxed_exposed_chiseled_copper", + "excirclewacoblock": "waxed_exposed_chiseled_copper", + "excirclewacopblock": "waxed_exposed_chiseled_copper", + "excirclewacopperblock": "waxed_exposed_chiseled_copper", + "excirclewaxcoblock": "waxed_exposed_chiseled_copper", + "excirclewaxcopblock": "waxed_exposed_chiseled_copper", + "excirclewaxcopperblock": "waxed_exposed_chiseled_copper", + "excirclewaxedcoblock": "waxed_exposed_chiseled_copper", + "excirclewaxedcopblock": "waxed_exposed_chiseled_copper", + "excirclewaxedcopperblock": "waxed_exposed_chiseled_copper", + "exciwacoblock": "waxed_exposed_chiseled_copper", + "exciwacopblock": "waxed_exposed_chiseled_copper", + "exciwacopperblock": "waxed_exposed_chiseled_copper", + "exciwaxcoblock": "waxed_exposed_chiseled_copper", + "exciwaxcopblock": "waxed_exposed_chiseled_copper", + "exciwaxcopperblock": "waxed_exposed_chiseled_copper", + "exciwaxedcoblock": "waxed_exposed_chiseled_copper", + "exciwaxedcopblock": "waxed_exposed_chiseled_copper", + "exciwaxedcopperblock": "waxed_exposed_chiseled_copper", + "expchiseledwacoblock": "waxed_exposed_chiseled_copper", + "expchiseledwacopblock": "waxed_exposed_chiseled_copper", + "expchiseledwacopperblock": "waxed_exposed_chiseled_copper", + "expchiseledwaxcoblock": "waxed_exposed_chiseled_copper", + "expchiseledwaxcopblock": "waxed_exposed_chiseled_copper", + "expchiseledwaxcopperblock": "waxed_exposed_chiseled_copper", + "expchiseledwaxedcoblock": "waxed_exposed_chiseled_copper", + "expchiseledwaxedcopblock": "waxed_exposed_chiseled_copper", + "expchiseledwaxedcopperblock": "waxed_exposed_chiseled_copper", + "expcirclewacoblock": "waxed_exposed_chiseled_copper", + "expcirclewacopblock": "waxed_exposed_chiseled_copper", + "expcirclewacopperblock": "waxed_exposed_chiseled_copper", + "expcirclewaxcoblock": "waxed_exposed_chiseled_copper", + "expcirclewaxcopblock": "waxed_exposed_chiseled_copper", + "expcirclewaxcopperblock": "waxed_exposed_chiseled_copper", + "expcirclewaxedcoblock": "waxed_exposed_chiseled_copper", + "expcirclewaxedcopblock": "waxed_exposed_chiseled_copper", + "expcirclewaxedcopperblock": "waxed_exposed_chiseled_copper", + "expciwacoblock": "waxed_exposed_chiseled_copper", + "expciwacopblock": "waxed_exposed_chiseled_copper", + "expciwacopperblock": "waxed_exposed_chiseled_copper", + "expciwaxcoblock": "waxed_exposed_chiseled_copper", + "expciwaxcopblock": "waxed_exposed_chiseled_copper", + "expciwaxcopperblock": "waxed_exposed_chiseled_copper", + "expciwaxedcoblock": "waxed_exposed_chiseled_copper", + "expciwaxedcopblock": "waxed_exposed_chiseled_copper", + "expciwaxedcopperblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwacoblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwacopblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwacopperblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwaxcoblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwaxcopblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwaxcopperblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwaxedcoblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwaxedcopblock": "waxed_exposed_chiseled_copper", + "exposedchiseledwaxedcopperblock": "waxed_exposed_chiseled_copper", + "exposedcirclewacoblock": "waxed_exposed_chiseled_copper", + "exposedcirclewacopblock": "waxed_exposed_chiseled_copper", + "exposedcirclewacopperblock": "waxed_exposed_chiseled_copper", + "exposedcirclewaxcoblock": "waxed_exposed_chiseled_copper", + "exposedcirclewaxcopblock": "waxed_exposed_chiseled_copper", + "exposedcirclewaxcopperblock": "waxed_exposed_chiseled_copper", + "exposedcirclewaxedcoblock": "waxed_exposed_chiseled_copper", + "exposedcirclewaxedcopblock": "waxed_exposed_chiseled_copper", + "exposedcirclewaxedcopperblock": "waxed_exposed_chiseled_copper", + "exposedciwacoblock": "waxed_exposed_chiseled_copper", + "exposedciwacopblock": "waxed_exposed_chiseled_copper", + "exposedciwacopperblock": "waxed_exposed_chiseled_copper", + "exposedciwaxcoblock": "waxed_exposed_chiseled_copper", + "exposedciwaxcopblock": "waxed_exposed_chiseled_copper", + "exposedciwaxcopperblock": "waxed_exposed_chiseled_copper", + "exposedciwaxedcoblock": "waxed_exposed_chiseled_copper", + "exposedciwaxedcopblock": "waxed_exposed_chiseled_copper", + "exposedciwaxedcopperblock": "waxed_exposed_chiseled_copper", + "exposedwachiseledcoblock": "waxed_exposed_chiseled_copper", + "exposedwachiseledcopblock": "waxed_exposed_chiseled_copper", + "exposedwachiseledcopperblock": "waxed_exposed_chiseled_copper", + "exposedwacicoblock": "waxed_exposed_chiseled_copper", + "exposedwacicopblock": "waxed_exposed_chiseled_copper", + "exposedwacicopperblock": "waxed_exposed_chiseled_copper", + "exposedwacirclecoblock": "waxed_exposed_chiseled_copper", + "exposedwacirclecopblock": "waxed_exposed_chiseled_copper", + "exposedwacirclecopperblock": "waxed_exposed_chiseled_copper", + "exposedwaxchiseledcoblock": "waxed_exposed_chiseled_copper", + "exposedwaxchiseledcopblock": "waxed_exposed_chiseled_copper", + "exposedwaxchiseledcopperblock": "waxed_exposed_chiseled_copper", + "exposedwaxcicoblock": "waxed_exposed_chiseled_copper", + "exposedwaxcicopblock": "waxed_exposed_chiseled_copper", + "exposedwaxcicopperblock": "waxed_exposed_chiseled_copper", + "exposedwaxcirclecoblock": "waxed_exposed_chiseled_copper", + "exposedwaxcirclecopblock": "waxed_exposed_chiseled_copper", + "exposedwaxcirclecopperblock": "waxed_exposed_chiseled_copper", + "exposedwaxedchiseledcoblock": "waxed_exposed_chiseled_copper", + "exposedwaxedchiseledcopblock": "waxed_exposed_chiseled_copper", + "exposedwaxedchiseledcopperblock": "waxed_exposed_chiseled_copper", + "exposedwaxedcicoblock": "waxed_exposed_chiseled_copper", + "exposedwaxedcicopblock": "waxed_exposed_chiseled_copper", + "exposedwaxedcicopperblock": "waxed_exposed_chiseled_copper", + "exposedwaxedcirclecoblock": "waxed_exposed_chiseled_copper", + "exposedwaxedcirclecopblock": "waxed_exposed_chiseled_copper", + "exposedwaxedcirclecopperblock": "waxed_exposed_chiseled_copper", + "expwachiseledcoblock": "waxed_exposed_chiseled_copper", + "expwachiseledcopblock": "waxed_exposed_chiseled_copper", + "expwachiseledcopperblock": "waxed_exposed_chiseled_copper", + "expwacicoblock": "waxed_exposed_chiseled_copper", + "expwacicopblock": "waxed_exposed_chiseled_copper", + "expwacicopperblock": "waxed_exposed_chiseled_copper", + "expwacirclecoblock": "waxed_exposed_chiseled_copper", + "expwacirclecopblock": "waxed_exposed_chiseled_copper", + "expwacirclecopperblock": "waxed_exposed_chiseled_copper", + "expwaxchiseledcoblock": "waxed_exposed_chiseled_copper", + "expwaxchiseledcopblock": "waxed_exposed_chiseled_copper", + "expwaxchiseledcopperblock": "waxed_exposed_chiseled_copper", + "expwaxcicoblock": "waxed_exposed_chiseled_copper", + "expwaxcicopblock": "waxed_exposed_chiseled_copper", + "expwaxcicopperblock": "waxed_exposed_chiseled_copper", + "expwaxcirclecoblock": "waxed_exposed_chiseled_copper", + "expwaxcirclecopblock": "waxed_exposed_chiseled_copper", + "expwaxcirclecopperblock": "waxed_exposed_chiseled_copper", + "expwaxedchiseledcoblock": "waxed_exposed_chiseled_copper", + "expwaxedchiseledcopblock": "waxed_exposed_chiseled_copper", + "expwaxedchiseledcopperblock": "waxed_exposed_chiseled_copper", + "expwaxedcicoblock": "waxed_exposed_chiseled_copper", + "expwaxedcicopblock": "waxed_exposed_chiseled_copper", + "expwaxedcicopperblock": "waxed_exposed_chiseled_copper", + "expwaxedcirclecoblock": "waxed_exposed_chiseled_copper", + "expwaxedcirclecopblock": "waxed_exposed_chiseled_copper", + "expwaxedcirclecopperblock": "waxed_exposed_chiseled_copper", + "exwachiseledcoblock": "waxed_exposed_chiseled_copper", + "exwachiseledcopblock": "waxed_exposed_chiseled_copper", + "exwachiseledcopperblock": "waxed_exposed_chiseled_copper", + "exwacicoblock": "waxed_exposed_chiseled_copper", + "exwacicopblock": "waxed_exposed_chiseled_copper", + "exwacicopperblock": "waxed_exposed_chiseled_copper", + "exwacirclecoblock": "waxed_exposed_chiseled_copper", + "exwacirclecopblock": "waxed_exposed_chiseled_copper", + "exwacirclecopperblock": "waxed_exposed_chiseled_copper", + "exwaxchiseledcoblock": "waxed_exposed_chiseled_copper", + "exwaxchiseledcopblock": "waxed_exposed_chiseled_copper", + "exwaxchiseledcopperblock": "waxed_exposed_chiseled_copper", + "exwaxcicoblock": "waxed_exposed_chiseled_copper", + "exwaxcicopblock": "waxed_exposed_chiseled_copper", + "exwaxcicopperblock": "waxed_exposed_chiseled_copper", + "exwaxcirclecoblock": "waxed_exposed_chiseled_copper", + "exwaxcirclecopblock": "waxed_exposed_chiseled_copper", + "exwaxcirclecopperblock": "waxed_exposed_chiseled_copper", + "exwaxedchiseledcoblock": "waxed_exposed_chiseled_copper", + "exwaxedchiseledcopblock": "waxed_exposed_chiseled_copper", + "exwaxedchiseledcopperblock": "waxed_exposed_chiseled_copper", + "exwaxedcicoblock": "waxed_exposed_chiseled_copper", + "exwaxedcicopblock": "waxed_exposed_chiseled_copper", + "exwaxedcicopperblock": "waxed_exposed_chiseled_copper", + "exwaxedcirclecoblock": "waxed_exposed_chiseled_copper", + "exwaxedcirclecopblock": "waxed_exposed_chiseled_copper", + "exwaxedcirclecopperblock": "waxed_exposed_chiseled_copper", + "minecraft:waxed_exposed_chiseled_copper": "waxed_exposed_chiseled_copper", + "wachiseledexcoblock": "waxed_exposed_chiseled_copper", + "wachiseledexcopblock": "waxed_exposed_chiseled_copper", + "wachiseledexcopperblock": "waxed_exposed_chiseled_copper", + "wachiseledexpcoblock": "waxed_exposed_chiseled_copper", + "wachiseledexpcopblock": "waxed_exposed_chiseled_copper", + "wachiseledexpcopperblock": "waxed_exposed_chiseled_copper", + "wachiseledexposedcoblock": "waxed_exposed_chiseled_copper", + "wachiseledexposedcopblock": "waxed_exposed_chiseled_copper", + "wachiseledexposedcopperblock": "waxed_exposed_chiseled_copper", + "waciexcoblock": "waxed_exposed_chiseled_copper", + "waciexcopblock": "waxed_exposed_chiseled_copper", + "waciexcopperblock": "waxed_exposed_chiseled_copper", + "waciexpcoblock": "waxed_exposed_chiseled_copper", + "waciexpcopblock": "waxed_exposed_chiseled_copper", + "waciexpcopperblock": "waxed_exposed_chiseled_copper", + "waciexposedcoblock": "waxed_exposed_chiseled_copper", + "waciexposedcopblock": "waxed_exposed_chiseled_copper", + "waciexposedcopperblock": "waxed_exposed_chiseled_copper", + "wacircleexcoblock": "waxed_exposed_chiseled_copper", + "wacircleexcopblock": "waxed_exposed_chiseled_copper", + "wacircleexcopperblock": "waxed_exposed_chiseled_copper", + "wacircleexpcoblock": "waxed_exposed_chiseled_copper", + "wacircleexpcopblock": "waxed_exposed_chiseled_copper", + "wacircleexpcopperblock": "waxed_exposed_chiseled_copper", + "wacircleexposedcoblock": "waxed_exposed_chiseled_copper", + "wacircleexposedcopblock": "waxed_exposed_chiseled_copper", + "wacircleexposedcopperblock": "waxed_exposed_chiseled_copper", + "waexchiseledcoblock": "waxed_exposed_chiseled_copper", + "waexchiseledcopblock": "waxed_exposed_chiseled_copper", + "waexchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waexcicoblock": "waxed_exposed_chiseled_copper", + "waexcicopblock": "waxed_exposed_chiseled_copper", + "waexcicopperblock": "waxed_exposed_chiseled_copper", + "waexcirclecoblock": "waxed_exposed_chiseled_copper", + "waexcirclecopblock": "waxed_exposed_chiseled_copper", + "waexcirclecopperblock": "waxed_exposed_chiseled_copper", + "waexpchiseledcoblock": "waxed_exposed_chiseled_copper", + "waexpchiseledcopblock": "waxed_exposed_chiseled_copper", + "waexpchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waexpcicoblock": "waxed_exposed_chiseled_copper", + "waexpcicopblock": "waxed_exposed_chiseled_copper", + "waexpcicopperblock": "waxed_exposed_chiseled_copper", + "waexpcirclecoblock": "waxed_exposed_chiseled_copper", + "waexpcirclecopblock": "waxed_exposed_chiseled_copper", + "waexpcirclecopperblock": "waxed_exposed_chiseled_copper", + "waexposedchiseledcoblock": "waxed_exposed_chiseled_copper", + "waexposedchiseledcopblock": "waxed_exposed_chiseled_copper", + "waexposedchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waexposedcicoblock": "waxed_exposed_chiseled_copper", + "waexposedcicopblock": "waxed_exposed_chiseled_copper", + "waexposedcicopperblock": "waxed_exposed_chiseled_copper", + "waexposedcirclecoblock": "waxed_exposed_chiseled_copper", + "waexposedcirclecopblock": "waxed_exposed_chiseled_copper", + "waexposedcirclecopperblock": "waxed_exposed_chiseled_copper", + "waxchiseledexcoblock": "waxed_exposed_chiseled_copper", + "waxchiseledexcopblock": "waxed_exposed_chiseled_copper", + "waxchiseledexcopperblock": "waxed_exposed_chiseled_copper", + "waxchiseledexpcoblock": "waxed_exposed_chiseled_copper", + "waxchiseledexpcopblock": "waxed_exposed_chiseled_copper", + "waxchiseledexpcopperblock": "waxed_exposed_chiseled_copper", + "waxchiseledexposedcoblock": "waxed_exposed_chiseled_copper", + "waxchiseledexposedcopblock": "waxed_exposed_chiseled_copper", + "waxchiseledexposedcopperblock": "waxed_exposed_chiseled_copper", + "waxciexcoblock": "waxed_exposed_chiseled_copper", + "waxciexcopblock": "waxed_exposed_chiseled_copper", + "waxciexcopperblock": "waxed_exposed_chiseled_copper", + "waxciexpcoblock": "waxed_exposed_chiseled_copper", + "waxciexpcopblock": "waxed_exposed_chiseled_copper", + "waxciexpcopperblock": "waxed_exposed_chiseled_copper", + "waxciexposedcoblock": "waxed_exposed_chiseled_copper", + "waxciexposedcopblock": "waxed_exposed_chiseled_copper", + "waxciexposedcopperblock": "waxed_exposed_chiseled_copper", + "waxcircleexcoblock": "waxed_exposed_chiseled_copper", + "waxcircleexcopblock": "waxed_exposed_chiseled_copper", + "waxcircleexcopperblock": "waxed_exposed_chiseled_copper", + "waxcircleexpcoblock": "waxed_exposed_chiseled_copper", + "waxcircleexpcopblock": "waxed_exposed_chiseled_copper", + "waxcircleexpcopperblock": "waxed_exposed_chiseled_copper", + "waxcircleexposedcoblock": "waxed_exposed_chiseled_copper", + "waxcircleexposedcopblock": "waxed_exposed_chiseled_copper", + "waxcircleexposedcopperblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexcoblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexcopblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexcopperblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexpcoblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexpcopblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexpcopperblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexposedcoblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexposedcopblock": "waxed_exposed_chiseled_copper", + "waxedchiseledexposedcopperblock": "waxed_exposed_chiseled_copper", + "waxedciexcoblock": "waxed_exposed_chiseled_copper", + "waxedciexcopblock": "waxed_exposed_chiseled_copper", + "waxedciexcopperblock": "waxed_exposed_chiseled_copper", + "waxedciexpcoblock": "waxed_exposed_chiseled_copper", + "waxedciexpcopblock": "waxed_exposed_chiseled_copper", + "waxedciexpcopperblock": "waxed_exposed_chiseled_copper", + "waxedciexposedcoblock": "waxed_exposed_chiseled_copper", + "waxedciexposedcopblock": "waxed_exposed_chiseled_copper", + "waxedciexposedcopperblock": "waxed_exposed_chiseled_copper", + "waxedcircleexcoblock": "waxed_exposed_chiseled_copper", + "waxedcircleexcopblock": "waxed_exposed_chiseled_copper", + "waxedcircleexcopperblock": "waxed_exposed_chiseled_copper", + "waxedcircleexpcoblock": "waxed_exposed_chiseled_copper", + "waxedcircleexpcopblock": "waxed_exposed_chiseled_copper", + "waxedcircleexpcopperblock": "waxed_exposed_chiseled_copper", + "waxedcircleexposedcoblock": "waxed_exposed_chiseled_copper", + "waxedcircleexposedcopblock": "waxed_exposed_chiseled_copper", + "waxedcircleexposedcopperblock": "waxed_exposed_chiseled_copper", + "waxedexchiseledcoblock": "waxed_exposed_chiseled_copper", + "waxedexchiseledcopblock": "waxed_exposed_chiseled_copper", + "waxedexchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waxedexcicoblock": "waxed_exposed_chiseled_copper", + "waxedexcicopblock": "waxed_exposed_chiseled_copper", + "waxedexcicopperblock": "waxed_exposed_chiseled_copper", + "waxedexcirclecoblock": "waxed_exposed_chiseled_copper", + "waxedexcirclecopblock": "waxed_exposed_chiseled_copper", + "waxedexcirclecopperblock": "waxed_exposed_chiseled_copper", + "waxedexpchiseledcoblock": "waxed_exposed_chiseled_copper", + "waxedexpchiseledcopblock": "waxed_exposed_chiseled_copper", + "waxedexpchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waxedexpcicoblock": "waxed_exposed_chiseled_copper", + "waxedexpcicopblock": "waxed_exposed_chiseled_copper", + "waxedexpcicopperblock": "waxed_exposed_chiseled_copper", + "waxedexpcirclecoblock": "waxed_exposed_chiseled_copper", + "waxedexpcirclecopblock": "waxed_exposed_chiseled_copper", + "waxedexpcirclecopperblock": "waxed_exposed_chiseled_copper", + "waxedexposedchiseledcoblock": "waxed_exposed_chiseled_copper", + "waxedexposedchiseledcopblock": "waxed_exposed_chiseled_copper", + "waxedexposedchiseledcopper": "waxed_exposed_chiseled_copper", + "waxedexposedchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waxedexposedcicoblock": "waxed_exposed_chiseled_copper", + "waxedexposedcicopblock": "waxed_exposed_chiseled_copper", + "waxedexposedcicopperblock": "waxed_exposed_chiseled_copper", + "waxedexposedcirclecoblock": "waxed_exposed_chiseled_copper", + "waxedexposedcirclecopblock": "waxed_exposed_chiseled_copper", + "waxedexposedcirclecopperblock": "waxed_exposed_chiseled_copper", + "waxexchiseledcoblock": "waxed_exposed_chiseled_copper", + "waxexchiseledcopblock": "waxed_exposed_chiseled_copper", + "waxexchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waxexcicoblock": "waxed_exposed_chiseled_copper", + "waxexcicopblock": "waxed_exposed_chiseled_copper", + "waxexcicopperblock": "waxed_exposed_chiseled_copper", + "waxexcirclecoblock": "waxed_exposed_chiseled_copper", + "waxexcirclecopblock": "waxed_exposed_chiseled_copper", + "waxexcirclecopperblock": "waxed_exposed_chiseled_copper", + "waxexpchiseledcoblock": "waxed_exposed_chiseled_copper", + "waxexpchiseledcopblock": "waxed_exposed_chiseled_copper", + "waxexpchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waxexpcicoblock": "waxed_exposed_chiseled_copper", + "waxexpcicopblock": "waxed_exposed_chiseled_copper", + "waxexpcicopperblock": "waxed_exposed_chiseled_copper", + "waxexpcirclecoblock": "waxed_exposed_chiseled_copper", + "waxexpcirclecopblock": "waxed_exposed_chiseled_copper", + "waxexpcirclecopperblock": "waxed_exposed_chiseled_copper", + "waxexposedchiseledcoblock": "waxed_exposed_chiseled_copper", + "waxexposedchiseledcopblock": "waxed_exposed_chiseled_copper", + "waxexposedchiseledcopperblock": "waxed_exposed_chiseled_copper", + "waxexposedcicoblock": "waxed_exposed_chiseled_copper", + "waxexposedcicopblock": "waxed_exposed_chiseled_copper", + "waxexposedcicopperblock": "waxed_exposed_chiseled_copper", + "waxexposedcirclecoblock": "waxed_exposed_chiseled_copper", + "waxexposedcirclecopblock": "waxed_exposed_chiseled_copper", + "waxexposedcirclecopperblock": "waxed_exposed_chiseled_copper", "waxed_exposed_copper": { "material": "WAXED_EXPOSED_COPPER" }, @@ -33005,6 +34559,224 @@ "waxexposedcoblock": "waxed_exposed_copper", "waxexposedcopblock": "waxed_exposed_copper", "waxexposedcopperblock": "waxed_exposed_copper", + "waxed_exposed_copper_bulb": { + "material": "WAXED_EXPOSED_COPPER_BULB" + }, + "exposedwabulb": "waxed_exposed_copper_bulb", + "exposedwaxbulb": "waxed_exposed_copper_bulb", + "exposedwaxedbulb": "waxed_exposed_copper_bulb", + "expwabulb": "waxed_exposed_copper_bulb", + "expwaxbulb": "waxed_exposed_copper_bulb", + "expwaxedbulb": "waxed_exposed_copper_bulb", + "exwabulb": "waxed_exposed_copper_bulb", + "exwaxbulb": "waxed_exposed_copper_bulb", + "exwaxedbulb": "waxed_exposed_copper_bulb", + "minecraft:waxed_exposed_copper_bulb": "waxed_exposed_copper_bulb", + "waexbulb": "waxed_exposed_copper_bulb", + "waexpbulb": "waxed_exposed_copper_bulb", + "waexposedbulb": "waxed_exposed_copper_bulb", + "waxedexbulb": "waxed_exposed_copper_bulb", + "waxedexpbulb": "waxed_exposed_copper_bulb", + "waxedexposedbulb": "waxed_exposed_copper_bulb", + "waxedexposedcopperbulb": "waxed_exposed_copper_bulb", + "waxexbulb": "waxed_exposed_copper_bulb", + "waxexpbulb": "waxed_exposed_copper_bulb", + "waxexposedbulb": "waxed_exposed_copper_bulb", + "waxed_exposed_copper_door": { + "material": "WAXED_EXPOSED_COPPER_DOOR" + }, + "doorexposedwa": "waxed_exposed_copper_door", + "doorexposedwax": "waxed_exposed_copper_door", + "doorexposedwaxed": "waxed_exposed_copper_door", + "doorexpwa": "waxed_exposed_copper_door", + "doorexpwax": "waxed_exposed_copper_door", + "doorexpwaxed": "waxed_exposed_copper_door", + "doorexwa": "waxed_exposed_copper_door", + "doorexwax": "waxed_exposed_copper_door", + "doorexwaxed": "waxed_exposed_copper_door", + "doorwaex": "waxed_exposed_copper_door", + "doorwaexp": "waxed_exposed_copper_door", + "doorwaexposed": "waxed_exposed_copper_door", + "doorwaxedex": "waxed_exposed_copper_door", + "doorwaxedexp": "waxed_exposed_copper_door", + "doorwaxedexposed": "waxed_exposed_copper_door", + "doorwaxex": "waxed_exposed_copper_door", + "doorwaxexp": "waxed_exposed_copper_door", + "doorwaxexposed": "waxed_exposed_copper_door", + "exposedwadoor": "waxed_exposed_copper_door", + "exposedwaxdoor": "waxed_exposed_copper_door", + "exposedwaxeddoor": "waxed_exposed_copper_door", + "expwadoor": "waxed_exposed_copper_door", + "expwaxdoor": "waxed_exposed_copper_door", + "expwaxeddoor": "waxed_exposed_copper_door", + "exwadoor": "waxed_exposed_copper_door", + "exwaxdoor": "waxed_exposed_copper_door", + "exwaxeddoor": "waxed_exposed_copper_door", + "minecraft:waxed_exposed_copper_door": "waxed_exposed_copper_door", + "waexdoor": "waxed_exposed_copper_door", + "waexpdoor": "waxed_exposed_copper_door", + "waexposeddoor": "waxed_exposed_copper_door", + "waxedexdoor": "waxed_exposed_copper_door", + "waxedexpdoor": "waxed_exposed_copper_door", + "waxedexposedcopperdoor": "waxed_exposed_copper_door", + "waxedexposeddoor": "waxed_exposed_copper_door", + "waxexdoor": "waxed_exposed_copper_door", + "waxexpdoor": "waxed_exposed_copper_door", + "waxexposeddoor": "waxed_exposed_copper_door", + "waxed_exposed_copper_grate": { + "material": "WAXED_EXPOSED_COPPER_GRATE" + }, + "exposedwagrate": "waxed_exposed_copper_grate", + "exposedwaxedgrate": "waxed_exposed_copper_grate", + "exposedwaxgrate": "waxed_exposed_copper_grate", + "expwagrate": "waxed_exposed_copper_grate", + "expwaxedgrate": "waxed_exposed_copper_grate", + "expwaxgrate": "waxed_exposed_copper_grate", + "exwagrate": "waxed_exposed_copper_grate", + "exwaxedgrate": "waxed_exposed_copper_grate", + "exwaxgrate": "waxed_exposed_copper_grate", + "minecraft:waxed_exposed_copper_grate": "waxed_exposed_copper_grate", + "waexgrate": "waxed_exposed_copper_grate", + "waexpgrate": "waxed_exposed_copper_grate", + "waexposedgrate": "waxed_exposed_copper_grate", + "waxedexgrate": "waxed_exposed_copper_grate", + "waxedexpgrate": "waxed_exposed_copper_grate", + "waxedexposedcoppergrate": "waxed_exposed_copper_grate", + "waxedexposedgrate": "waxed_exposed_copper_grate", + "waxexgrate": "waxed_exposed_copper_grate", + "waxexpgrate": "waxed_exposed_copper_grate", + "waxexposedgrate": "waxed_exposed_copper_grate", + "waxed_exposed_copper_trapdoor": { + "material": "WAXED_EXPOSED_COPPER_TRAPDOOR" + }, + "exposedwadoort": "waxed_exposed_copper_trapdoor", + "exposedwadoortrap": "waxed_exposed_copper_trapdoor", + "exposedwadtrap": "waxed_exposed_copper_trapdoor", + "exposedwahatch": "waxed_exposed_copper_trapdoor", + "exposedwatdoor": "waxed_exposed_copper_trapdoor", + "exposedwatrapd": "waxed_exposed_copper_trapdoor", + "exposedwatrapdoor": "waxed_exposed_copper_trapdoor", + "exposedwaxdoort": "waxed_exposed_copper_trapdoor", + "exposedwaxdoortrap": "waxed_exposed_copper_trapdoor", + "exposedwaxdtrap": "waxed_exposed_copper_trapdoor", + "exposedwaxeddoort": "waxed_exposed_copper_trapdoor", + "exposedwaxeddoortrap": "waxed_exposed_copper_trapdoor", + "exposedwaxeddtrap": "waxed_exposed_copper_trapdoor", + "exposedwaxedhatch": "waxed_exposed_copper_trapdoor", + "exposedwaxedtdoor": "waxed_exposed_copper_trapdoor", + "exposedwaxedtrapd": "waxed_exposed_copper_trapdoor", + "exposedwaxedtrapdoor": "waxed_exposed_copper_trapdoor", + "exposedwaxhatch": "waxed_exposed_copper_trapdoor", + "exposedwaxtdoor": "waxed_exposed_copper_trapdoor", + "exposedwaxtrapd": "waxed_exposed_copper_trapdoor", + "exposedwaxtrapdoor": "waxed_exposed_copper_trapdoor", + "expwadoort": "waxed_exposed_copper_trapdoor", + "expwadoortrap": "waxed_exposed_copper_trapdoor", + "expwadtrap": "waxed_exposed_copper_trapdoor", + "expwahatch": "waxed_exposed_copper_trapdoor", + "expwatdoor": "waxed_exposed_copper_trapdoor", + "expwatrapd": "waxed_exposed_copper_trapdoor", + "expwatrapdoor": "waxed_exposed_copper_trapdoor", + "expwaxdoort": "waxed_exposed_copper_trapdoor", + "expwaxdoortrap": "waxed_exposed_copper_trapdoor", + "expwaxdtrap": "waxed_exposed_copper_trapdoor", + "expwaxeddoort": "waxed_exposed_copper_trapdoor", + "expwaxeddoortrap": "waxed_exposed_copper_trapdoor", + "expwaxeddtrap": "waxed_exposed_copper_trapdoor", + "expwaxedhatch": "waxed_exposed_copper_trapdoor", + "expwaxedtdoor": "waxed_exposed_copper_trapdoor", + "expwaxedtrapd": "waxed_exposed_copper_trapdoor", + "expwaxedtrapdoor": "waxed_exposed_copper_trapdoor", + "expwaxhatch": "waxed_exposed_copper_trapdoor", + "expwaxtdoor": "waxed_exposed_copper_trapdoor", + "expwaxtrapd": "waxed_exposed_copper_trapdoor", + "expwaxtrapdoor": "waxed_exposed_copper_trapdoor", + "exwadoort": "waxed_exposed_copper_trapdoor", + "exwadoortrap": "waxed_exposed_copper_trapdoor", + "exwadtrap": "waxed_exposed_copper_trapdoor", + "exwahatch": "waxed_exposed_copper_trapdoor", + "exwatdoor": "waxed_exposed_copper_trapdoor", + "exwatrapd": "waxed_exposed_copper_trapdoor", + "exwatrapdoor": "waxed_exposed_copper_trapdoor", + "exwaxdoort": "waxed_exposed_copper_trapdoor", + "exwaxdoortrap": "waxed_exposed_copper_trapdoor", + "exwaxdtrap": "waxed_exposed_copper_trapdoor", + "exwaxeddoort": "waxed_exposed_copper_trapdoor", + "exwaxeddoortrap": "waxed_exposed_copper_trapdoor", + "exwaxeddtrap": "waxed_exposed_copper_trapdoor", + "exwaxedhatch": "waxed_exposed_copper_trapdoor", + "exwaxedtdoor": "waxed_exposed_copper_trapdoor", + "exwaxedtrapd": "waxed_exposed_copper_trapdoor", + "exwaxedtrapdoor": "waxed_exposed_copper_trapdoor", + "exwaxhatch": "waxed_exposed_copper_trapdoor", + "exwaxtdoor": "waxed_exposed_copper_trapdoor", + "exwaxtrapd": "waxed_exposed_copper_trapdoor", + "exwaxtrapdoor": "waxed_exposed_copper_trapdoor", + "minecraft:waxed_exposed_copper_trapdoor": "waxed_exposed_copper_trapdoor", + "waexdoort": "waxed_exposed_copper_trapdoor", + "waexdoortrap": "waxed_exposed_copper_trapdoor", + "waexdtrap": "waxed_exposed_copper_trapdoor", + "waexhatch": "waxed_exposed_copper_trapdoor", + "waexpdoort": "waxed_exposed_copper_trapdoor", + "waexpdoortrap": "waxed_exposed_copper_trapdoor", + "waexpdtrap": "waxed_exposed_copper_trapdoor", + "waexphatch": "waxed_exposed_copper_trapdoor", + "waexposeddoort": "waxed_exposed_copper_trapdoor", + "waexposeddoortrap": "waxed_exposed_copper_trapdoor", + "waexposeddtrap": "waxed_exposed_copper_trapdoor", + "waexposedhatch": "waxed_exposed_copper_trapdoor", + "waexposedtdoor": "waxed_exposed_copper_trapdoor", + "waexposedtrapd": "waxed_exposed_copper_trapdoor", + "waexposedtrapdoor": "waxed_exposed_copper_trapdoor", + "waexptdoor": "waxed_exposed_copper_trapdoor", + "waexptrapd": "waxed_exposed_copper_trapdoor", + "waexptrapdoor": "waxed_exposed_copper_trapdoor", + "waextdoor": "waxed_exposed_copper_trapdoor", + "waextrapd": "waxed_exposed_copper_trapdoor", + "waextrapdoor": "waxed_exposed_copper_trapdoor", + "waxedexdoort": "waxed_exposed_copper_trapdoor", + "waxedexdoortrap": "waxed_exposed_copper_trapdoor", + "waxedexdtrap": "waxed_exposed_copper_trapdoor", + "waxedexhatch": "waxed_exposed_copper_trapdoor", + "waxedexpdoort": "waxed_exposed_copper_trapdoor", + "waxedexpdoortrap": "waxed_exposed_copper_trapdoor", + "waxedexpdtrap": "waxed_exposed_copper_trapdoor", + "waxedexphatch": "waxed_exposed_copper_trapdoor", + "waxedexposedcoppertrapdoor": "waxed_exposed_copper_trapdoor", + "waxedexposeddoort": "waxed_exposed_copper_trapdoor", + "waxedexposeddoortrap": "waxed_exposed_copper_trapdoor", + "waxedexposeddtrap": "waxed_exposed_copper_trapdoor", + "waxedexposedhatch": "waxed_exposed_copper_trapdoor", + "waxedexposedtdoor": "waxed_exposed_copper_trapdoor", + "waxedexposedtrapd": "waxed_exposed_copper_trapdoor", + "waxedexposedtrapdoor": "waxed_exposed_copper_trapdoor", + "waxedexptdoor": "waxed_exposed_copper_trapdoor", + "waxedexptrapd": "waxed_exposed_copper_trapdoor", + "waxedexptrapdoor": "waxed_exposed_copper_trapdoor", + "waxedextdoor": "waxed_exposed_copper_trapdoor", + "waxedextrapd": "waxed_exposed_copper_trapdoor", + "waxedextrapdoor": "waxed_exposed_copper_trapdoor", + "waxexdoort": "waxed_exposed_copper_trapdoor", + "waxexdoortrap": "waxed_exposed_copper_trapdoor", + "waxexdtrap": "waxed_exposed_copper_trapdoor", + "waxexhatch": "waxed_exposed_copper_trapdoor", + "waxexpdoort": "waxed_exposed_copper_trapdoor", + "waxexpdoortrap": "waxed_exposed_copper_trapdoor", + "waxexpdtrap": "waxed_exposed_copper_trapdoor", + "waxexphatch": "waxed_exposed_copper_trapdoor", + "waxexposeddoort": "waxed_exposed_copper_trapdoor", + "waxexposeddoortrap": "waxed_exposed_copper_trapdoor", + "waxexposeddtrap": "waxed_exposed_copper_trapdoor", + "waxexposedhatch": "waxed_exposed_copper_trapdoor", + "waxexposedtdoor": "waxed_exposed_copper_trapdoor", + "waxexposedtrapd": "waxed_exposed_copper_trapdoor", + "waxexposedtrapdoor": "waxed_exposed_copper_trapdoor", + "waxexptdoor": "waxed_exposed_copper_trapdoor", + "waxexptrapd": "waxed_exposed_copper_trapdoor", + "waxexptrapdoor": "waxed_exposed_copper_trapdoor", + "waxextdoor": "waxed_exposed_copper_trapdoor", + "waxextrapd": "waxed_exposed_copper_trapdoor", + "waxextrapdoor": "waxed_exposed_copper_trapdoor", "waxed_exposed_cut_copper": { "material": "WAXED_EXPOSED_CUT_COPPER" }, @@ -35286,6 +37058,659 @@ "waxexposedcutcopstairs": "waxed_exposed_cut_copper_stairs", "waxexposedcutcostair": "waxed_exposed_cut_copper_stairs", "waxexposedcutcostairs": "waxed_exposed_cut_copper_stairs", + "waxed_oxidized_chiseled_copper": { + "material": "WAXED_OXIDIZED_CHISELED_COPPER" + }, + "chiseledoxidisedwacoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwacopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwacopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwaxcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwaxcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwaxcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwaxedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwaxedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidisedwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwacoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwacopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwacopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwaxcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwaxcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwaxcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwaxedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwaxedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxidizedwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwacoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwacopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwacopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwaxcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwaxcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwaxcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwaxedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwaxedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxiwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywacoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywacopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywacopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywaxcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywaxcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywaxcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywaxedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywaxedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledoxywaxedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxicoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxicopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxicopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxycoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxycopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaoxycopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxicoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxicopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxicopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxycoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxycopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxedoxycopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxicoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxicopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxicopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxycoblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxycopblock": "waxed_oxidized_chiseled_copper", + "chiseledwaxoxycopperblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwacoblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwacopblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwacopperblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwaxcoblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwaxcopblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwaxcopperblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwaxedcoblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwaxedcopblock": "waxed_oxidized_chiseled_copper", + "cioxidisedwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwacoblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwacopblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwacopperblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwaxcoblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwaxcopblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwaxcopperblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwaxedcoblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwaxedcopblock": "waxed_oxidized_chiseled_copper", + "cioxidizedwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "cioxiwacoblock": "waxed_oxidized_chiseled_copper", + "cioxiwacopblock": "waxed_oxidized_chiseled_copper", + "cioxiwacopperblock": "waxed_oxidized_chiseled_copper", + "cioxiwaxcoblock": "waxed_oxidized_chiseled_copper", + "cioxiwaxcopblock": "waxed_oxidized_chiseled_copper", + "cioxiwaxcopperblock": "waxed_oxidized_chiseled_copper", + "cioxiwaxedcoblock": "waxed_oxidized_chiseled_copper", + "cioxiwaxedcopblock": "waxed_oxidized_chiseled_copper", + "cioxiwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "cioxywacoblock": "waxed_oxidized_chiseled_copper", + "cioxywacopblock": "waxed_oxidized_chiseled_copper", + "cioxywacopperblock": "waxed_oxidized_chiseled_copper", + "cioxywaxcoblock": "waxed_oxidized_chiseled_copper", + "cioxywaxcopblock": "waxed_oxidized_chiseled_copper", + "cioxywaxcopperblock": "waxed_oxidized_chiseled_copper", + "cioxywaxedcoblock": "waxed_oxidized_chiseled_copper", + "cioxywaxedcopblock": "waxed_oxidized_chiseled_copper", + "cioxywaxedcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwacoblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwacopblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwacopperblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwaxcoblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwaxcopblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwaxcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwaxedcoblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwaxedcopblock": "waxed_oxidized_chiseled_copper", + "circleoxidisedwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwacoblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwacopblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwacopperblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwaxcoblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwaxcopblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwaxcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwaxedcoblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwaxedcopblock": "waxed_oxidized_chiseled_copper", + "circleoxidizedwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxiwacoblock": "waxed_oxidized_chiseled_copper", + "circleoxiwacopblock": "waxed_oxidized_chiseled_copper", + "circleoxiwacopperblock": "waxed_oxidized_chiseled_copper", + "circleoxiwaxcoblock": "waxed_oxidized_chiseled_copper", + "circleoxiwaxcopblock": "waxed_oxidized_chiseled_copper", + "circleoxiwaxcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxiwaxedcoblock": "waxed_oxidized_chiseled_copper", + "circleoxiwaxedcopblock": "waxed_oxidized_chiseled_copper", + "circleoxiwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxywacoblock": "waxed_oxidized_chiseled_copper", + "circleoxywacopblock": "waxed_oxidized_chiseled_copper", + "circleoxywacopperblock": "waxed_oxidized_chiseled_copper", + "circleoxywaxcoblock": "waxed_oxidized_chiseled_copper", + "circleoxywaxcopblock": "waxed_oxidized_chiseled_copper", + "circleoxywaxcopperblock": "waxed_oxidized_chiseled_copper", + "circleoxywaxedcoblock": "waxed_oxidized_chiseled_copper", + "circleoxywaxedcopblock": "waxed_oxidized_chiseled_copper", + "circleoxywaxedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaoxicoblock": "waxed_oxidized_chiseled_copper", + "circlewaoxicopblock": "waxed_oxidized_chiseled_copper", + "circlewaoxicopperblock": "waxed_oxidized_chiseled_copper", + "circlewaoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "circlewaoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "circlewaoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "circlewaoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "circlewaoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaoxycoblock": "waxed_oxidized_chiseled_copper", + "circlewaoxycopblock": "waxed_oxidized_chiseled_copper", + "circlewaoxycopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxicoblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxicopblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxicopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxycoblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxycopblock": "waxed_oxidized_chiseled_copper", + "circlewaxedoxycopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxicoblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxicopblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxicopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxycoblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxycopblock": "waxed_oxidized_chiseled_copper", + "circlewaxoxycopperblock": "waxed_oxidized_chiseled_copper", + "ciwaoxicoblock": "waxed_oxidized_chiseled_copper", + "ciwaoxicopblock": "waxed_oxidized_chiseled_copper", + "ciwaoxicopperblock": "waxed_oxidized_chiseled_copper", + "ciwaoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "ciwaoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "ciwaoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "ciwaoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "ciwaoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "ciwaoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "ciwaoxycoblock": "waxed_oxidized_chiseled_copper", + "ciwaoxycopblock": "waxed_oxidized_chiseled_copper", + "ciwaoxycopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxicoblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxicopblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxicopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxycoblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxycopblock": "waxed_oxidized_chiseled_copper", + "ciwaxedoxycopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxicoblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxicopblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxicopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxycoblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxycopblock": "waxed_oxidized_chiseled_copper", + "ciwaxoxycopperblock": "waxed_oxidized_chiseled_copper", + "minecraft:waxed_oxidized_chiseled_copper": "waxed_oxidized_chiseled_copper", + "oxichiseledwacoblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwacopblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwacopperblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxichiseledwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxicirclewacoblock": "waxed_oxidized_chiseled_copper", + "oxicirclewacopblock": "waxed_oxidized_chiseled_copper", + "oxicirclewacopperblock": "waxed_oxidized_chiseled_copper", + "oxicirclewaxcoblock": "waxed_oxidized_chiseled_copper", + "oxicirclewaxcopblock": "waxed_oxidized_chiseled_copper", + "oxicirclewaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxicirclewaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxicirclewaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxicirclewaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxiciwacoblock": "waxed_oxidized_chiseled_copper", + "oxiciwacopblock": "waxed_oxidized_chiseled_copper", + "oxiciwacopperblock": "waxed_oxidized_chiseled_copper", + "oxiciwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxiciwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxiciwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxiciwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxiciwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxiciwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwacoblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwacopblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwacopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedchiseledwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewacoblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewacopblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewacopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewaxcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewaxcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedcirclewaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwacoblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwacopblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwacopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedciwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwachiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwachiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwachiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwacicoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwacicopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwacicopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwacirclecoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwacirclecopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwacirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxcicoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxcicopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxcicopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedcicoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedcicopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedcicopperblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxidisedwaxedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwacoblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwacopblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwacopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedchiseledwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewacoblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewacopblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewacopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewaxcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewaxcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedcirclewaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwacoblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwacopblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwacopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedciwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwachiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwachiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwachiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwacicoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwacicopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwacicopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwacirclecoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwacirclecopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwacirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxcicoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxcicopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxcicopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedcicoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedcicopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedcicopperblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxidizedwaxedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxiwachiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxiwachiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxiwachiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxiwacicoblock": "waxed_oxidized_chiseled_copper", + "oxiwacicopblock": "waxed_oxidized_chiseled_copper", + "oxiwacicopperblock": "waxed_oxidized_chiseled_copper", + "oxiwacirclecoblock": "waxed_oxidized_chiseled_copper", + "oxiwacirclecopblock": "waxed_oxidized_chiseled_copper", + "oxiwacirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxiwaxchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxiwaxchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxiwaxchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxiwaxcicoblock": "waxed_oxidized_chiseled_copper", + "oxiwaxcicopblock": "waxed_oxidized_chiseled_copper", + "oxiwaxcicopperblock": "waxed_oxidized_chiseled_copper", + "oxiwaxcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxiwaxcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxiwaxcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedcicoblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedcicopblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedcicopperblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxiwaxedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwacoblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwacopblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwacopperblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxychiseledwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxycirclewacoblock": "waxed_oxidized_chiseled_copper", + "oxycirclewacopblock": "waxed_oxidized_chiseled_copper", + "oxycirclewacopperblock": "waxed_oxidized_chiseled_copper", + "oxycirclewaxcoblock": "waxed_oxidized_chiseled_copper", + "oxycirclewaxcopblock": "waxed_oxidized_chiseled_copper", + "oxycirclewaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxycirclewaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxycirclewaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxycirclewaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxyciwacoblock": "waxed_oxidized_chiseled_copper", + "oxyciwacopblock": "waxed_oxidized_chiseled_copper", + "oxyciwacopperblock": "waxed_oxidized_chiseled_copper", + "oxyciwaxcoblock": "waxed_oxidized_chiseled_copper", + "oxyciwaxcopblock": "waxed_oxidized_chiseled_copper", + "oxyciwaxcopperblock": "waxed_oxidized_chiseled_copper", + "oxyciwaxedcoblock": "waxed_oxidized_chiseled_copper", + "oxyciwaxedcopblock": "waxed_oxidized_chiseled_copper", + "oxyciwaxedcopperblock": "waxed_oxidized_chiseled_copper", + "oxywachiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxywachiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxywachiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxywacicoblock": "waxed_oxidized_chiseled_copper", + "oxywacicopblock": "waxed_oxidized_chiseled_copper", + "oxywacicopperblock": "waxed_oxidized_chiseled_copper", + "oxywacirclecoblock": "waxed_oxidized_chiseled_copper", + "oxywacirclecopblock": "waxed_oxidized_chiseled_copper", + "oxywacirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxywaxchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxywaxchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxywaxchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxywaxcicoblock": "waxed_oxidized_chiseled_copper", + "oxywaxcicopblock": "waxed_oxidized_chiseled_copper", + "oxywaxcicopperblock": "waxed_oxidized_chiseled_copper", + "oxywaxcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxywaxcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxywaxcirclecopperblock": "waxed_oxidized_chiseled_copper", + "oxywaxedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "oxywaxedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "oxywaxedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "oxywaxedcicoblock": "waxed_oxidized_chiseled_copper", + "oxywaxedcicopblock": "waxed_oxidized_chiseled_copper", + "oxywaxedcicopperblock": "waxed_oxidized_chiseled_copper", + "oxywaxedcirclecoblock": "waxed_oxidized_chiseled_copper", + "oxywaxedcirclecopblock": "waxed_oxidized_chiseled_copper", + "oxywaxedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxicoblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxicopblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxicopperblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxycoblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxycopblock": "waxed_oxidized_chiseled_copper", + "wachiseledoxycopperblock": "waxed_oxidized_chiseled_copper", + "wacioxicoblock": "waxed_oxidized_chiseled_copper", + "wacioxicopblock": "waxed_oxidized_chiseled_copper", + "wacioxicopperblock": "waxed_oxidized_chiseled_copper", + "wacioxidisedcoblock": "waxed_oxidized_chiseled_copper", + "wacioxidisedcopblock": "waxed_oxidized_chiseled_copper", + "wacioxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "wacioxidizedcoblock": "waxed_oxidized_chiseled_copper", + "wacioxidizedcopblock": "waxed_oxidized_chiseled_copper", + "wacioxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "wacioxycoblock": "waxed_oxidized_chiseled_copper", + "wacioxycopblock": "waxed_oxidized_chiseled_copper", + "wacioxycopperblock": "waxed_oxidized_chiseled_copper", + "wacircleoxicoblock": "waxed_oxidized_chiseled_copper", + "wacircleoxicopblock": "waxed_oxidized_chiseled_copper", + "wacircleoxicopperblock": "waxed_oxidized_chiseled_copper", + "wacircleoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "wacircleoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "wacircleoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "wacircleoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "wacircleoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "wacircleoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "wacircleoxycoblock": "waxed_oxidized_chiseled_copper", + "wacircleoxycopblock": "waxed_oxidized_chiseled_copper", + "wacircleoxycopperblock": "waxed_oxidized_chiseled_copper", + "waoxichiseledcoblock": "waxed_oxidized_chiseled_copper", + "waoxichiseledcopblock": "waxed_oxidized_chiseled_copper", + "waoxichiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waoxicicoblock": "waxed_oxidized_chiseled_copper", + "waoxicicopblock": "waxed_oxidized_chiseled_copper", + "waoxicicopperblock": "waxed_oxidized_chiseled_copper", + "waoxicirclecoblock": "waxed_oxidized_chiseled_copper", + "waoxicirclecopblock": "waxed_oxidized_chiseled_copper", + "waoxicirclecopperblock": "waxed_oxidized_chiseled_copper", + "waoxidisedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "waoxidisedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "waoxidisedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waoxidisedcicoblock": "waxed_oxidized_chiseled_copper", + "waoxidisedcicopblock": "waxed_oxidized_chiseled_copper", + "waoxidisedcicopperblock": "waxed_oxidized_chiseled_copper", + "waoxidisedcirclecoblock": "waxed_oxidized_chiseled_copper", + "waoxidisedcirclecopblock": "waxed_oxidized_chiseled_copper", + "waoxidisedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "waoxidizedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "waoxidizedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "waoxidizedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waoxidizedcicoblock": "waxed_oxidized_chiseled_copper", + "waoxidizedcicopblock": "waxed_oxidized_chiseled_copper", + "waoxidizedcicopperblock": "waxed_oxidized_chiseled_copper", + "waoxidizedcirclecoblock": "waxed_oxidized_chiseled_copper", + "waoxidizedcirclecopblock": "waxed_oxidized_chiseled_copper", + "waoxidizedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "waoxychiseledcoblock": "waxed_oxidized_chiseled_copper", + "waoxychiseledcopblock": "waxed_oxidized_chiseled_copper", + "waoxychiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waoxycicoblock": "waxed_oxidized_chiseled_copper", + "waoxycicopblock": "waxed_oxidized_chiseled_copper", + "waoxycicopperblock": "waxed_oxidized_chiseled_copper", + "waoxycirclecoblock": "waxed_oxidized_chiseled_copper", + "waoxycirclecopblock": "waxed_oxidized_chiseled_copper", + "waoxycirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxicoblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxicopblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxicopperblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxycoblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxycopblock": "waxed_oxidized_chiseled_copper", + "waxchiseledoxycopperblock": "waxed_oxidized_chiseled_copper", + "waxcioxicoblock": "waxed_oxidized_chiseled_copper", + "waxcioxicopblock": "waxed_oxidized_chiseled_copper", + "waxcioxicopperblock": "waxed_oxidized_chiseled_copper", + "waxcioxidisedcoblock": "waxed_oxidized_chiseled_copper", + "waxcioxidisedcopblock": "waxed_oxidized_chiseled_copper", + "waxcioxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "waxcioxidizedcoblock": "waxed_oxidized_chiseled_copper", + "waxcioxidizedcopblock": "waxed_oxidized_chiseled_copper", + "waxcioxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "waxcioxycoblock": "waxed_oxidized_chiseled_copper", + "waxcioxycopblock": "waxed_oxidized_chiseled_copper", + "waxcioxycopperblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxicoblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxicopblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxicopperblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxycoblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxycopblock": "waxed_oxidized_chiseled_copper", + "waxcircleoxycopperblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxicoblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxicopblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxicopperblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxycoblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxycopblock": "waxed_oxidized_chiseled_copper", + "waxedchiseledoxycopperblock": "waxed_oxidized_chiseled_copper", + "waxedcioxicoblock": "waxed_oxidized_chiseled_copper", + "waxedcioxicopblock": "waxed_oxidized_chiseled_copper", + "waxedcioxicopperblock": "waxed_oxidized_chiseled_copper", + "waxedcioxidisedcoblock": "waxed_oxidized_chiseled_copper", + "waxedcioxidisedcopblock": "waxed_oxidized_chiseled_copper", + "waxedcioxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "waxedcioxidizedcoblock": "waxed_oxidized_chiseled_copper", + "waxedcioxidizedcopblock": "waxed_oxidized_chiseled_copper", + "waxedcioxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "waxedcioxycoblock": "waxed_oxidized_chiseled_copper", + "waxedcioxycopblock": "waxed_oxidized_chiseled_copper", + "waxedcioxycopperblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxicoblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxicopblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxicopperblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxidisedcoblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxidisedcopblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxidisedcopperblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxidizedcoblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxidizedcopblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxidizedcopperblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxycoblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxycopblock": "waxed_oxidized_chiseled_copper", + "waxedcircleoxycopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxichiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxedoxichiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxedoxichiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxicicoblock": "waxed_oxidized_chiseled_copper", + "waxedoxicicopblock": "waxed_oxidized_chiseled_copper", + "waxedoxicicopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxicirclecoblock": "waxed_oxidized_chiseled_copper", + "waxedoxicirclecopblock": "waxed_oxidized_chiseled_copper", + "waxedoxicirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedcicoblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedcicopblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedcicopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedcirclecoblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedcirclecopblock": "waxed_oxidized_chiseled_copper", + "waxedoxidisedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedchiseledcopper": "waxed_oxidized_chiseled_copper", + "waxedoxidizedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedcicoblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedcicopblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedcicopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedcirclecoblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedcirclecopblock": "waxed_oxidized_chiseled_copper", + "waxedoxidizedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxychiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxedoxychiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxedoxychiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxycicoblock": "waxed_oxidized_chiseled_copper", + "waxedoxycicopblock": "waxed_oxidized_chiseled_copper", + "waxedoxycicopperblock": "waxed_oxidized_chiseled_copper", + "waxedoxycirclecoblock": "waxed_oxidized_chiseled_copper", + "waxedoxycirclecopblock": "waxed_oxidized_chiseled_copper", + "waxedoxycirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxoxichiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxoxichiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxoxichiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxoxicicoblock": "waxed_oxidized_chiseled_copper", + "waxoxicicopblock": "waxed_oxidized_chiseled_copper", + "waxoxicicopperblock": "waxed_oxidized_chiseled_copper", + "waxoxicirclecoblock": "waxed_oxidized_chiseled_copper", + "waxoxicirclecopblock": "waxed_oxidized_chiseled_copper", + "waxoxicirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedcicoblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedcicopblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedcicopperblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedcirclecoblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedcirclecopblock": "waxed_oxidized_chiseled_copper", + "waxoxidisedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedchiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedchiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedchiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedcicoblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedcicopblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedcicopperblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedcirclecoblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedcirclecopblock": "waxed_oxidized_chiseled_copper", + "waxoxidizedcirclecopperblock": "waxed_oxidized_chiseled_copper", + "waxoxychiseledcoblock": "waxed_oxidized_chiseled_copper", + "waxoxychiseledcopblock": "waxed_oxidized_chiseled_copper", + "waxoxychiseledcopperblock": "waxed_oxidized_chiseled_copper", + "waxoxycicoblock": "waxed_oxidized_chiseled_copper", + "waxoxycicopblock": "waxed_oxidized_chiseled_copper", + "waxoxycicopperblock": "waxed_oxidized_chiseled_copper", + "waxoxycirclecoblock": "waxed_oxidized_chiseled_copper", + "waxoxycirclecopblock": "waxed_oxidized_chiseled_copper", + "waxoxycirclecopperblock": "waxed_oxidized_chiseled_copper", "waxed_oxidized_copper": { "material": "WAXED_OXIDIZED_COPPER" }, @@ -35363,6 +37788,290 @@ "waxoxycoblock": "waxed_oxidized_copper", "waxoxycopblock": "waxed_oxidized_copper", "waxoxycopperblock": "waxed_oxidized_copper", + "waxed_oxidized_copper_bulb": { + "material": "WAXED_OXIDIZED_COPPER_BULB" + }, + "minecraft:waxed_oxidized_copper_bulb": "waxed_oxidized_copper_bulb", + "oxidisedwabulb": "waxed_oxidized_copper_bulb", + "oxidisedwaxbulb": "waxed_oxidized_copper_bulb", + "oxidisedwaxedbulb": "waxed_oxidized_copper_bulb", + "oxidizedwabulb": "waxed_oxidized_copper_bulb", + "oxidizedwaxbulb": "waxed_oxidized_copper_bulb", + "oxidizedwaxedbulb": "waxed_oxidized_copper_bulb", + "oxiwabulb": "waxed_oxidized_copper_bulb", + "oxiwaxbulb": "waxed_oxidized_copper_bulb", + "oxiwaxedbulb": "waxed_oxidized_copper_bulb", + "oxywabulb": "waxed_oxidized_copper_bulb", + "oxywaxbulb": "waxed_oxidized_copper_bulb", + "oxywaxedbulb": "waxed_oxidized_copper_bulb", + "waoxibulb": "waxed_oxidized_copper_bulb", + "waoxidisedbulb": "waxed_oxidized_copper_bulb", + "waoxidizedbulb": "waxed_oxidized_copper_bulb", + "waoxybulb": "waxed_oxidized_copper_bulb", + "waxedoxibulb": "waxed_oxidized_copper_bulb", + "waxedoxidisedbulb": "waxed_oxidized_copper_bulb", + "waxedoxidizedbulb": "waxed_oxidized_copper_bulb", + "waxedoxidizedcopperbulb": "waxed_oxidized_copper_bulb", + "waxedoxybulb": "waxed_oxidized_copper_bulb", + "waxoxibulb": "waxed_oxidized_copper_bulb", + "waxoxidisedbulb": "waxed_oxidized_copper_bulb", + "waxoxidizedbulb": "waxed_oxidized_copper_bulb", + "waxoxybulb": "waxed_oxidized_copper_bulb", + "waxed_oxidized_copper_door": { + "material": "WAXED_OXIDIZED_COPPER_DOOR" + }, + "dooroxidisedwa": "waxed_oxidized_copper_door", + "dooroxidisedwax": "waxed_oxidized_copper_door", + "dooroxidisedwaxed": "waxed_oxidized_copper_door", + "dooroxidizedwa": "waxed_oxidized_copper_door", + "dooroxidizedwax": "waxed_oxidized_copper_door", + "dooroxidizedwaxed": "waxed_oxidized_copper_door", + "dooroxiwa": "waxed_oxidized_copper_door", + "dooroxiwax": "waxed_oxidized_copper_door", + "dooroxiwaxed": "waxed_oxidized_copper_door", + "dooroxywa": "waxed_oxidized_copper_door", + "dooroxywax": "waxed_oxidized_copper_door", + "dooroxywaxed": "waxed_oxidized_copper_door", + "doorwaoxi": "waxed_oxidized_copper_door", + "doorwaoxidised": "waxed_oxidized_copper_door", + "doorwaoxidized": "waxed_oxidized_copper_door", + "doorwaoxy": "waxed_oxidized_copper_door", + "doorwaxedoxi": "waxed_oxidized_copper_door", + "doorwaxedoxidised": "waxed_oxidized_copper_door", + "doorwaxedoxidized": "waxed_oxidized_copper_door", + "doorwaxedoxy": "waxed_oxidized_copper_door", + "doorwaxoxi": "waxed_oxidized_copper_door", + "doorwaxoxidised": "waxed_oxidized_copper_door", + "doorwaxoxidized": "waxed_oxidized_copper_door", + "doorwaxoxy": "waxed_oxidized_copper_door", + "minecraft:waxed_oxidized_copper_door": "waxed_oxidized_copper_door", + "oxidisedwadoor": "waxed_oxidized_copper_door", + "oxidisedwaxdoor": "waxed_oxidized_copper_door", + "oxidisedwaxeddoor": "waxed_oxidized_copper_door", + "oxidizedwadoor": "waxed_oxidized_copper_door", + "oxidizedwaxdoor": "waxed_oxidized_copper_door", + "oxidizedwaxeddoor": "waxed_oxidized_copper_door", + "oxiwadoor": "waxed_oxidized_copper_door", + "oxiwaxdoor": "waxed_oxidized_copper_door", + "oxiwaxeddoor": "waxed_oxidized_copper_door", + "oxywadoor": "waxed_oxidized_copper_door", + "oxywaxdoor": "waxed_oxidized_copper_door", + "oxywaxeddoor": "waxed_oxidized_copper_door", + "waoxidiseddoor": "waxed_oxidized_copper_door", + "waoxidizeddoor": "waxed_oxidized_copper_door", + "waoxidoor": "waxed_oxidized_copper_door", + "waoxydoor": "waxed_oxidized_copper_door", + "waxedoxidiseddoor": "waxed_oxidized_copper_door", + "waxedoxidizedcopperdoor": "waxed_oxidized_copper_door", + "waxedoxidizeddoor": "waxed_oxidized_copper_door", + "waxedoxidoor": "waxed_oxidized_copper_door", + "waxedoxydoor": "waxed_oxidized_copper_door", + "waxoxidiseddoor": "waxed_oxidized_copper_door", + "waxoxidizeddoor": "waxed_oxidized_copper_door", + "waxoxidoor": "waxed_oxidized_copper_door", + "waxoxydoor": "waxed_oxidized_copper_door", + "waxed_oxidized_copper_grate": { + "material": "WAXED_OXIDIZED_COPPER_GRATE" + }, + "minecraft:waxed_oxidized_copper_grate": "waxed_oxidized_copper_grate", + "oxidisedwagrate": "waxed_oxidized_copper_grate", + "oxidisedwaxedgrate": "waxed_oxidized_copper_grate", + "oxidisedwaxgrate": "waxed_oxidized_copper_grate", + "oxidizedwagrate": "waxed_oxidized_copper_grate", + "oxidizedwaxedgrate": "waxed_oxidized_copper_grate", + "oxidizedwaxgrate": "waxed_oxidized_copper_grate", + "oxiwagrate": "waxed_oxidized_copper_grate", + "oxiwaxedgrate": "waxed_oxidized_copper_grate", + "oxiwaxgrate": "waxed_oxidized_copper_grate", + "oxywagrate": "waxed_oxidized_copper_grate", + "oxywaxedgrate": "waxed_oxidized_copper_grate", + "oxywaxgrate": "waxed_oxidized_copper_grate", + "waoxidisedgrate": "waxed_oxidized_copper_grate", + "waoxidizedgrate": "waxed_oxidized_copper_grate", + "waoxigrate": "waxed_oxidized_copper_grate", + "waoxygrate": "waxed_oxidized_copper_grate", + "waxedoxidisedgrate": "waxed_oxidized_copper_grate", + "waxedoxidizedcoppergrate": "waxed_oxidized_copper_grate", + "waxedoxidizedgrate": "waxed_oxidized_copper_grate", + "waxedoxigrate": "waxed_oxidized_copper_grate", + "waxedoxygrate": "waxed_oxidized_copper_grate", + "waxoxidisedgrate": "waxed_oxidized_copper_grate", + "waxoxidizedgrate": "waxed_oxidized_copper_grate", + "waxoxigrate": "waxed_oxidized_copper_grate", + "waxoxygrate": "waxed_oxidized_copper_grate", + "waxed_oxidized_copper_trapdoor": { + "material": "WAXED_OXIDIZED_COPPER_TRAPDOOR" + }, + "minecraft:waxed_oxidized_copper_trapdoor": "waxed_oxidized_copper_trapdoor", + "oxidisedwadoort": "waxed_oxidized_copper_trapdoor", + "oxidisedwadoortrap": "waxed_oxidized_copper_trapdoor", + "oxidisedwadtrap": "waxed_oxidized_copper_trapdoor", + "oxidisedwahatch": "waxed_oxidized_copper_trapdoor", + "oxidisedwatdoor": "waxed_oxidized_copper_trapdoor", + "oxidisedwatrapd": "waxed_oxidized_copper_trapdoor", + "oxidisedwatrapdoor": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxdoort": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxdoortrap": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxdtrap": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxeddoort": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxeddoortrap": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxeddtrap": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxedhatch": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxedtdoor": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxedtrapd": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxedtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxhatch": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxtdoor": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxtrapd": "waxed_oxidized_copper_trapdoor", + "oxidisedwaxtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxidizedwadoort": "waxed_oxidized_copper_trapdoor", + "oxidizedwadoortrap": "waxed_oxidized_copper_trapdoor", + "oxidizedwadtrap": "waxed_oxidized_copper_trapdoor", + "oxidizedwahatch": "waxed_oxidized_copper_trapdoor", + "oxidizedwatdoor": "waxed_oxidized_copper_trapdoor", + "oxidizedwatrapd": "waxed_oxidized_copper_trapdoor", + "oxidizedwatrapdoor": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxdoort": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxdoortrap": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxdtrap": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxeddoort": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxeddoortrap": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxeddtrap": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxedhatch": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxedtdoor": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxedtrapd": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxedtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxhatch": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxtdoor": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxtrapd": "waxed_oxidized_copper_trapdoor", + "oxidizedwaxtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxiwadoort": "waxed_oxidized_copper_trapdoor", + "oxiwadoortrap": "waxed_oxidized_copper_trapdoor", + "oxiwadtrap": "waxed_oxidized_copper_trapdoor", + "oxiwahatch": "waxed_oxidized_copper_trapdoor", + "oxiwatdoor": "waxed_oxidized_copper_trapdoor", + "oxiwatrapd": "waxed_oxidized_copper_trapdoor", + "oxiwatrapdoor": "waxed_oxidized_copper_trapdoor", + "oxiwaxdoort": "waxed_oxidized_copper_trapdoor", + "oxiwaxdoortrap": "waxed_oxidized_copper_trapdoor", + "oxiwaxdtrap": "waxed_oxidized_copper_trapdoor", + "oxiwaxeddoort": "waxed_oxidized_copper_trapdoor", + "oxiwaxeddoortrap": "waxed_oxidized_copper_trapdoor", + "oxiwaxeddtrap": "waxed_oxidized_copper_trapdoor", + "oxiwaxedhatch": "waxed_oxidized_copper_trapdoor", + "oxiwaxedtdoor": "waxed_oxidized_copper_trapdoor", + "oxiwaxedtrapd": "waxed_oxidized_copper_trapdoor", + "oxiwaxedtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxiwaxhatch": "waxed_oxidized_copper_trapdoor", + "oxiwaxtdoor": "waxed_oxidized_copper_trapdoor", + "oxiwaxtrapd": "waxed_oxidized_copper_trapdoor", + "oxiwaxtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxywadoort": "waxed_oxidized_copper_trapdoor", + "oxywadoortrap": "waxed_oxidized_copper_trapdoor", + "oxywadtrap": "waxed_oxidized_copper_trapdoor", + "oxywahatch": "waxed_oxidized_copper_trapdoor", + "oxywatdoor": "waxed_oxidized_copper_trapdoor", + "oxywatrapd": "waxed_oxidized_copper_trapdoor", + "oxywatrapdoor": "waxed_oxidized_copper_trapdoor", + "oxywaxdoort": "waxed_oxidized_copper_trapdoor", + "oxywaxdoortrap": "waxed_oxidized_copper_trapdoor", + "oxywaxdtrap": "waxed_oxidized_copper_trapdoor", + "oxywaxeddoort": "waxed_oxidized_copper_trapdoor", + "oxywaxeddoortrap": "waxed_oxidized_copper_trapdoor", + "oxywaxeddtrap": "waxed_oxidized_copper_trapdoor", + "oxywaxedhatch": "waxed_oxidized_copper_trapdoor", + "oxywaxedtdoor": "waxed_oxidized_copper_trapdoor", + "oxywaxedtrapd": "waxed_oxidized_copper_trapdoor", + "oxywaxedtrapdoor": "waxed_oxidized_copper_trapdoor", + "oxywaxhatch": "waxed_oxidized_copper_trapdoor", + "oxywaxtdoor": "waxed_oxidized_copper_trapdoor", + "oxywaxtrapd": "waxed_oxidized_copper_trapdoor", + "oxywaxtrapdoor": "waxed_oxidized_copper_trapdoor", + "waoxidiseddoort": "waxed_oxidized_copper_trapdoor", + "waoxidiseddoortrap": "waxed_oxidized_copper_trapdoor", + "waoxidiseddtrap": "waxed_oxidized_copper_trapdoor", + "waoxidisedhatch": "waxed_oxidized_copper_trapdoor", + "waoxidisedtdoor": "waxed_oxidized_copper_trapdoor", + "waoxidisedtrapd": "waxed_oxidized_copper_trapdoor", + "waoxidisedtrapdoor": "waxed_oxidized_copper_trapdoor", + "waoxidizeddoort": "waxed_oxidized_copper_trapdoor", + "waoxidizeddoortrap": "waxed_oxidized_copper_trapdoor", + "waoxidizeddtrap": "waxed_oxidized_copper_trapdoor", + "waoxidizedhatch": "waxed_oxidized_copper_trapdoor", + "waoxidizedtdoor": "waxed_oxidized_copper_trapdoor", + "waoxidizedtrapd": "waxed_oxidized_copper_trapdoor", + "waoxidizedtrapdoor": "waxed_oxidized_copper_trapdoor", + "waoxidoort": "waxed_oxidized_copper_trapdoor", + "waoxidoortrap": "waxed_oxidized_copper_trapdoor", + "waoxidtrap": "waxed_oxidized_copper_trapdoor", + "waoxihatch": "waxed_oxidized_copper_trapdoor", + "waoxitdoor": "waxed_oxidized_copper_trapdoor", + "waoxitrapd": "waxed_oxidized_copper_trapdoor", + "waoxitrapdoor": "waxed_oxidized_copper_trapdoor", + "waoxydoort": "waxed_oxidized_copper_trapdoor", + "waoxydoortrap": "waxed_oxidized_copper_trapdoor", + "waoxydtrap": "waxed_oxidized_copper_trapdoor", + "waoxyhatch": "waxed_oxidized_copper_trapdoor", + "waoxytdoor": "waxed_oxidized_copper_trapdoor", + "waoxytrapd": "waxed_oxidized_copper_trapdoor", + "waoxytrapdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxidiseddoort": "waxed_oxidized_copper_trapdoor", + "waxedoxidiseddoortrap": "waxed_oxidized_copper_trapdoor", + "waxedoxidiseddtrap": "waxed_oxidized_copper_trapdoor", + "waxedoxidisedhatch": "waxed_oxidized_copper_trapdoor", + "waxedoxidisedtdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxidisedtrapd": "waxed_oxidized_copper_trapdoor", + "waxedoxidisedtrapdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxidizedcoppertrapdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxidizeddoort": "waxed_oxidized_copper_trapdoor", + "waxedoxidizeddoortrap": "waxed_oxidized_copper_trapdoor", + "waxedoxidizeddtrap": "waxed_oxidized_copper_trapdoor", + "waxedoxidizedhatch": "waxed_oxidized_copper_trapdoor", + "waxedoxidizedtdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxidizedtrapd": "waxed_oxidized_copper_trapdoor", + "waxedoxidizedtrapdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxidoort": "waxed_oxidized_copper_trapdoor", + "waxedoxidoortrap": "waxed_oxidized_copper_trapdoor", + "waxedoxidtrap": "waxed_oxidized_copper_trapdoor", + "waxedoxihatch": "waxed_oxidized_copper_trapdoor", + "waxedoxitdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxitrapd": "waxed_oxidized_copper_trapdoor", + "waxedoxitrapdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxydoort": "waxed_oxidized_copper_trapdoor", + "waxedoxydoortrap": "waxed_oxidized_copper_trapdoor", + "waxedoxydtrap": "waxed_oxidized_copper_trapdoor", + "waxedoxyhatch": "waxed_oxidized_copper_trapdoor", + "waxedoxytdoor": "waxed_oxidized_copper_trapdoor", + "waxedoxytrapd": "waxed_oxidized_copper_trapdoor", + "waxedoxytrapdoor": "waxed_oxidized_copper_trapdoor", + "waxoxidiseddoort": "waxed_oxidized_copper_trapdoor", + "waxoxidiseddoortrap": "waxed_oxidized_copper_trapdoor", + "waxoxidiseddtrap": "waxed_oxidized_copper_trapdoor", + "waxoxidisedhatch": "waxed_oxidized_copper_trapdoor", + "waxoxidisedtdoor": "waxed_oxidized_copper_trapdoor", + "waxoxidisedtrapd": "waxed_oxidized_copper_trapdoor", + "waxoxidisedtrapdoor": "waxed_oxidized_copper_trapdoor", + "waxoxidizeddoort": "waxed_oxidized_copper_trapdoor", + "waxoxidizeddoortrap": "waxed_oxidized_copper_trapdoor", + "waxoxidizeddtrap": "waxed_oxidized_copper_trapdoor", + "waxoxidizedhatch": "waxed_oxidized_copper_trapdoor", + "waxoxidizedtdoor": "waxed_oxidized_copper_trapdoor", + "waxoxidizedtrapd": "waxed_oxidized_copper_trapdoor", + "waxoxidizedtrapdoor": "waxed_oxidized_copper_trapdoor", + "waxoxidoort": "waxed_oxidized_copper_trapdoor", + "waxoxidoortrap": "waxed_oxidized_copper_trapdoor", + "waxoxidtrap": "waxed_oxidized_copper_trapdoor", + "waxoxihatch": "waxed_oxidized_copper_trapdoor", + "waxoxitdoor": "waxed_oxidized_copper_trapdoor", + "waxoxitrapd": "waxed_oxidized_copper_trapdoor", + "waxoxitrapdoor": "waxed_oxidized_copper_trapdoor", + "waxoxydoort": "waxed_oxidized_copper_trapdoor", + "waxoxydoortrap": "waxed_oxidized_copper_trapdoor", + "waxoxydtrap": "waxed_oxidized_copper_trapdoor", + "waxoxyhatch": "waxed_oxidized_copper_trapdoor", + "waxoxytdoor": "waxed_oxidized_copper_trapdoor", + "waxoxytrapd": "waxed_oxidized_copper_trapdoor", + "waxoxytrapdoor": "waxed_oxidized_copper_trapdoor", "waxed_oxidized_cut_copper": { "material": "WAXED_OXIDIZED_CUT_COPPER" }, @@ -38400,6 +41109,659 @@ "waxoxycutcopstairs": "waxed_oxidized_cut_copper_stairs", "waxoxycutcostair": "waxed_oxidized_cut_copper_stairs", "waxoxycutcostairs": "waxed_oxidized_cut_copper_stairs", + "waxed_weathered_chiseled_copper": { + "material": "WAXED_WEATHERED_CHISELED_COPPER" + }, + "chiseledwaweathercoblock": "waxed_weathered_chiseled_copper", + "chiseledwaweathercopblock": "waxed_weathered_chiseled_copper", + "chiseledwaweathercopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaweatheredcoblock": "waxed_weathered_chiseled_copper", + "chiseledwaweatheredcopblock": "waxed_weathered_chiseled_copper", + "chiseledwaweatheredcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwawecoblock": "waxed_weathered_chiseled_copper", + "chiseledwawecopblock": "waxed_weathered_chiseled_copper", + "chiseledwawecopperblock": "waxed_weathered_chiseled_copper", + "chiseledwawthcoblock": "waxed_weathered_chiseled_copper", + "chiseledwawthcopblock": "waxed_weathered_chiseled_copper", + "chiseledwawthcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedweathercoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedweathercopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedweathercopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedweatheredcoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedweatheredcopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedweatheredcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedwecoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedwecopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedwecopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedwthcoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedwthcopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxedwthcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxweathercoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxweathercopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxweathercopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxweatheredcoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxweatheredcopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxweatheredcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxwecoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxwecopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxwecopperblock": "waxed_weathered_chiseled_copper", + "chiseledwaxwthcoblock": "waxed_weathered_chiseled_copper", + "chiseledwaxwthcopblock": "waxed_weathered_chiseled_copper", + "chiseledwaxwthcopperblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwacoblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwacopblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwacopperblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwaxcoblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwaxcopblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwaxcopperblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwaxedcoblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwaxedcopblock": "waxed_weathered_chiseled_copper", + "chiseledweatheredwaxedcopperblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwacoblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwacopblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwacopperblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwaxcoblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwaxcopblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwaxcopperblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwaxedcoblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwaxedcopblock": "waxed_weathered_chiseled_copper", + "chiseledweatherwaxedcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwewacoblock": "waxed_weathered_chiseled_copper", + "chiseledwewacopblock": "waxed_weathered_chiseled_copper", + "chiseledwewacopperblock": "waxed_weathered_chiseled_copper", + "chiseledwewaxcoblock": "waxed_weathered_chiseled_copper", + "chiseledwewaxcopblock": "waxed_weathered_chiseled_copper", + "chiseledwewaxcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwewaxedcoblock": "waxed_weathered_chiseled_copper", + "chiseledwewaxedcopblock": "waxed_weathered_chiseled_copper", + "chiseledwewaxedcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwthwacoblock": "waxed_weathered_chiseled_copper", + "chiseledwthwacopblock": "waxed_weathered_chiseled_copper", + "chiseledwthwacopperblock": "waxed_weathered_chiseled_copper", + "chiseledwthwaxcoblock": "waxed_weathered_chiseled_copper", + "chiseledwthwaxcopblock": "waxed_weathered_chiseled_copper", + "chiseledwthwaxcopperblock": "waxed_weathered_chiseled_copper", + "chiseledwthwaxedcoblock": "waxed_weathered_chiseled_copper", + "chiseledwthwaxedcopblock": "waxed_weathered_chiseled_copper", + "chiseledwthwaxedcopperblock": "waxed_weathered_chiseled_copper", + "circlewaweathercoblock": "waxed_weathered_chiseled_copper", + "circlewaweathercopblock": "waxed_weathered_chiseled_copper", + "circlewaweathercopperblock": "waxed_weathered_chiseled_copper", + "circlewaweatheredcoblock": "waxed_weathered_chiseled_copper", + "circlewaweatheredcopblock": "waxed_weathered_chiseled_copper", + "circlewaweatheredcopperblock": "waxed_weathered_chiseled_copper", + "circlewawecoblock": "waxed_weathered_chiseled_copper", + "circlewawecopblock": "waxed_weathered_chiseled_copper", + "circlewawecopperblock": "waxed_weathered_chiseled_copper", + "circlewawthcoblock": "waxed_weathered_chiseled_copper", + "circlewawthcopblock": "waxed_weathered_chiseled_copper", + "circlewawthcopperblock": "waxed_weathered_chiseled_copper", + "circlewaxedweathercoblock": "waxed_weathered_chiseled_copper", + "circlewaxedweathercopblock": "waxed_weathered_chiseled_copper", + "circlewaxedweathercopperblock": "waxed_weathered_chiseled_copper", + "circlewaxedweatheredcoblock": "waxed_weathered_chiseled_copper", + "circlewaxedweatheredcopblock": "waxed_weathered_chiseled_copper", + "circlewaxedweatheredcopperblock": "waxed_weathered_chiseled_copper", + "circlewaxedwecoblock": "waxed_weathered_chiseled_copper", + "circlewaxedwecopblock": "waxed_weathered_chiseled_copper", + "circlewaxedwecopperblock": "waxed_weathered_chiseled_copper", + "circlewaxedwthcoblock": "waxed_weathered_chiseled_copper", + "circlewaxedwthcopblock": "waxed_weathered_chiseled_copper", + "circlewaxedwthcopperblock": "waxed_weathered_chiseled_copper", + "circlewaxweathercoblock": "waxed_weathered_chiseled_copper", + "circlewaxweathercopblock": "waxed_weathered_chiseled_copper", + "circlewaxweathercopperblock": "waxed_weathered_chiseled_copper", + "circlewaxweatheredcoblock": "waxed_weathered_chiseled_copper", + "circlewaxweatheredcopblock": "waxed_weathered_chiseled_copper", + "circlewaxweatheredcopperblock": "waxed_weathered_chiseled_copper", + "circlewaxwecoblock": "waxed_weathered_chiseled_copper", + "circlewaxwecopblock": "waxed_weathered_chiseled_copper", + "circlewaxwecopperblock": "waxed_weathered_chiseled_copper", + "circlewaxwthcoblock": "waxed_weathered_chiseled_copper", + "circlewaxwthcopblock": "waxed_weathered_chiseled_copper", + "circlewaxwthcopperblock": "waxed_weathered_chiseled_copper", + "circleweatheredwacoblock": "waxed_weathered_chiseled_copper", + "circleweatheredwacopblock": "waxed_weathered_chiseled_copper", + "circleweatheredwacopperblock": "waxed_weathered_chiseled_copper", + "circleweatheredwaxcoblock": "waxed_weathered_chiseled_copper", + "circleweatheredwaxcopblock": "waxed_weathered_chiseled_copper", + "circleweatheredwaxcopperblock": "waxed_weathered_chiseled_copper", + "circleweatheredwaxedcoblock": "waxed_weathered_chiseled_copper", + "circleweatheredwaxedcopblock": "waxed_weathered_chiseled_copper", + "circleweatheredwaxedcopperblock": "waxed_weathered_chiseled_copper", + "circleweatherwacoblock": "waxed_weathered_chiseled_copper", + "circleweatherwacopblock": "waxed_weathered_chiseled_copper", + "circleweatherwacopperblock": "waxed_weathered_chiseled_copper", + "circleweatherwaxcoblock": "waxed_weathered_chiseled_copper", + "circleweatherwaxcopblock": "waxed_weathered_chiseled_copper", + "circleweatherwaxcopperblock": "waxed_weathered_chiseled_copper", + "circleweatherwaxedcoblock": "waxed_weathered_chiseled_copper", + "circleweatherwaxedcopblock": "waxed_weathered_chiseled_copper", + "circleweatherwaxedcopperblock": "waxed_weathered_chiseled_copper", + "circlewewacoblock": "waxed_weathered_chiseled_copper", + "circlewewacopblock": "waxed_weathered_chiseled_copper", + "circlewewacopperblock": "waxed_weathered_chiseled_copper", + "circlewewaxcoblock": "waxed_weathered_chiseled_copper", + "circlewewaxcopblock": "waxed_weathered_chiseled_copper", + "circlewewaxcopperblock": "waxed_weathered_chiseled_copper", + "circlewewaxedcoblock": "waxed_weathered_chiseled_copper", + "circlewewaxedcopblock": "waxed_weathered_chiseled_copper", + "circlewewaxedcopperblock": "waxed_weathered_chiseled_copper", + "circlewthwacoblock": "waxed_weathered_chiseled_copper", + "circlewthwacopblock": "waxed_weathered_chiseled_copper", + "circlewthwacopperblock": "waxed_weathered_chiseled_copper", + "circlewthwaxcoblock": "waxed_weathered_chiseled_copper", + "circlewthwaxcopblock": "waxed_weathered_chiseled_copper", + "circlewthwaxcopperblock": "waxed_weathered_chiseled_copper", + "circlewthwaxedcoblock": "waxed_weathered_chiseled_copper", + "circlewthwaxedcopblock": "waxed_weathered_chiseled_copper", + "circlewthwaxedcopperblock": "waxed_weathered_chiseled_copper", + "ciwaweathercoblock": "waxed_weathered_chiseled_copper", + "ciwaweathercopblock": "waxed_weathered_chiseled_copper", + "ciwaweathercopperblock": "waxed_weathered_chiseled_copper", + "ciwaweatheredcoblock": "waxed_weathered_chiseled_copper", + "ciwaweatheredcopblock": "waxed_weathered_chiseled_copper", + "ciwaweatheredcopperblock": "waxed_weathered_chiseled_copper", + "ciwawecoblock": "waxed_weathered_chiseled_copper", + "ciwawecopblock": "waxed_weathered_chiseled_copper", + "ciwawecopperblock": "waxed_weathered_chiseled_copper", + "ciwawthcoblock": "waxed_weathered_chiseled_copper", + "ciwawthcopblock": "waxed_weathered_chiseled_copper", + "ciwawthcopperblock": "waxed_weathered_chiseled_copper", + "ciwaxedweathercoblock": "waxed_weathered_chiseled_copper", + "ciwaxedweathercopblock": "waxed_weathered_chiseled_copper", + "ciwaxedweathercopperblock": "waxed_weathered_chiseled_copper", + "ciwaxedweatheredcoblock": "waxed_weathered_chiseled_copper", + "ciwaxedweatheredcopblock": "waxed_weathered_chiseled_copper", + "ciwaxedweatheredcopperblock": "waxed_weathered_chiseled_copper", + "ciwaxedwecoblock": "waxed_weathered_chiseled_copper", + "ciwaxedwecopblock": "waxed_weathered_chiseled_copper", + "ciwaxedwecopperblock": "waxed_weathered_chiseled_copper", + "ciwaxedwthcoblock": "waxed_weathered_chiseled_copper", + "ciwaxedwthcopblock": "waxed_weathered_chiseled_copper", + "ciwaxedwthcopperblock": "waxed_weathered_chiseled_copper", + "ciwaxweathercoblock": "waxed_weathered_chiseled_copper", + "ciwaxweathercopblock": "waxed_weathered_chiseled_copper", + "ciwaxweathercopperblock": "waxed_weathered_chiseled_copper", + "ciwaxweatheredcoblock": "waxed_weathered_chiseled_copper", + "ciwaxweatheredcopblock": "waxed_weathered_chiseled_copper", + "ciwaxweatheredcopperblock": "waxed_weathered_chiseled_copper", + "ciwaxwecoblock": "waxed_weathered_chiseled_copper", + "ciwaxwecopblock": "waxed_weathered_chiseled_copper", + "ciwaxwecopperblock": "waxed_weathered_chiseled_copper", + "ciwaxwthcoblock": "waxed_weathered_chiseled_copper", + "ciwaxwthcopblock": "waxed_weathered_chiseled_copper", + "ciwaxwthcopperblock": "waxed_weathered_chiseled_copper", + "ciweatheredwacoblock": "waxed_weathered_chiseled_copper", + "ciweatheredwacopblock": "waxed_weathered_chiseled_copper", + "ciweatheredwacopperblock": "waxed_weathered_chiseled_copper", + "ciweatheredwaxcoblock": "waxed_weathered_chiseled_copper", + "ciweatheredwaxcopblock": "waxed_weathered_chiseled_copper", + "ciweatheredwaxcopperblock": "waxed_weathered_chiseled_copper", + "ciweatheredwaxedcoblock": "waxed_weathered_chiseled_copper", + "ciweatheredwaxedcopblock": "waxed_weathered_chiseled_copper", + "ciweatheredwaxedcopperblock": "waxed_weathered_chiseled_copper", + "ciweatherwacoblock": "waxed_weathered_chiseled_copper", + "ciweatherwacopblock": "waxed_weathered_chiseled_copper", + "ciweatherwacopperblock": "waxed_weathered_chiseled_copper", + "ciweatherwaxcoblock": "waxed_weathered_chiseled_copper", + "ciweatherwaxcopblock": "waxed_weathered_chiseled_copper", + "ciweatherwaxcopperblock": "waxed_weathered_chiseled_copper", + "ciweatherwaxedcoblock": "waxed_weathered_chiseled_copper", + "ciweatherwaxedcopblock": "waxed_weathered_chiseled_copper", + "ciweatherwaxedcopperblock": "waxed_weathered_chiseled_copper", + "ciwewacoblock": "waxed_weathered_chiseled_copper", + "ciwewacopblock": "waxed_weathered_chiseled_copper", + "ciwewacopperblock": "waxed_weathered_chiseled_copper", + "ciwewaxcoblock": "waxed_weathered_chiseled_copper", + "ciwewaxcopblock": "waxed_weathered_chiseled_copper", + "ciwewaxcopperblock": "waxed_weathered_chiseled_copper", + "ciwewaxedcoblock": "waxed_weathered_chiseled_copper", + "ciwewaxedcopblock": "waxed_weathered_chiseled_copper", + "ciwewaxedcopperblock": "waxed_weathered_chiseled_copper", + "ciwthwacoblock": "waxed_weathered_chiseled_copper", + "ciwthwacopblock": "waxed_weathered_chiseled_copper", + "ciwthwacopperblock": "waxed_weathered_chiseled_copper", + "ciwthwaxcoblock": "waxed_weathered_chiseled_copper", + "ciwthwaxcopblock": "waxed_weathered_chiseled_copper", + "ciwthwaxcopperblock": "waxed_weathered_chiseled_copper", + "ciwthwaxedcoblock": "waxed_weathered_chiseled_copper", + "ciwthwaxedcopblock": "waxed_weathered_chiseled_copper", + "ciwthwaxedcopperblock": "waxed_weathered_chiseled_copper", + "minecraft:waxed_weathered_chiseled_copper": "waxed_weathered_chiseled_copper", + "wachiseledweathercoblock": "waxed_weathered_chiseled_copper", + "wachiseledweathercopblock": "waxed_weathered_chiseled_copper", + "wachiseledweathercopperblock": "waxed_weathered_chiseled_copper", + "wachiseledweatheredcoblock": "waxed_weathered_chiseled_copper", + "wachiseledweatheredcopblock": "waxed_weathered_chiseled_copper", + "wachiseledweatheredcopperblock": "waxed_weathered_chiseled_copper", + "wachiseledwecoblock": "waxed_weathered_chiseled_copper", + "wachiseledwecopblock": "waxed_weathered_chiseled_copper", + "wachiseledwecopperblock": "waxed_weathered_chiseled_copper", + "wachiseledwthcoblock": "waxed_weathered_chiseled_copper", + "wachiseledwthcopblock": "waxed_weathered_chiseled_copper", + "wachiseledwthcopperblock": "waxed_weathered_chiseled_copper", + "wacircleweathercoblock": "waxed_weathered_chiseled_copper", + "wacircleweathercopblock": "waxed_weathered_chiseled_copper", + "wacircleweathercopperblock": "waxed_weathered_chiseled_copper", + "wacircleweatheredcoblock": "waxed_weathered_chiseled_copper", + "wacircleweatheredcopblock": "waxed_weathered_chiseled_copper", + "wacircleweatheredcopperblock": "waxed_weathered_chiseled_copper", + "wacirclewecoblock": "waxed_weathered_chiseled_copper", + "wacirclewecopblock": "waxed_weathered_chiseled_copper", + "wacirclewecopperblock": "waxed_weathered_chiseled_copper", + "wacirclewthcoblock": "waxed_weathered_chiseled_copper", + "wacirclewthcopblock": "waxed_weathered_chiseled_copper", + "wacirclewthcopperblock": "waxed_weathered_chiseled_copper", + "waciweathercoblock": "waxed_weathered_chiseled_copper", + "waciweathercopblock": "waxed_weathered_chiseled_copper", + "waciweathercopperblock": "waxed_weathered_chiseled_copper", + "waciweatheredcoblock": "waxed_weathered_chiseled_copper", + "waciweatheredcopblock": "waxed_weathered_chiseled_copper", + "waciweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waciwecoblock": "waxed_weathered_chiseled_copper", + "waciwecopblock": "waxed_weathered_chiseled_copper", + "waciwecopperblock": "waxed_weathered_chiseled_copper", + "waciwthcoblock": "waxed_weathered_chiseled_copper", + "waciwthcopblock": "waxed_weathered_chiseled_copper", + "waciwthcopperblock": "waxed_weathered_chiseled_copper", + "waweatherchiseledcoblock": "waxed_weathered_chiseled_copper", + "waweatherchiseledcopblock": "waxed_weathered_chiseled_copper", + "waweatherchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waweathercicoblock": "waxed_weathered_chiseled_copper", + "waweathercicopblock": "waxed_weathered_chiseled_copper", + "waweathercicopperblock": "waxed_weathered_chiseled_copper", + "waweathercirclecoblock": "waxed_weathered_chiseled_copper", + "waweathercirclecopblock": "waxed_weathered_chiseled_copper", + "waweathercirclecopperblock": "waxed_weathered_chiseled_copper", + "waweatheredchiseledcoblock": "waxed_weathered_chiseled_copper", + "waweatheredchiseledcopblock": "waxed_weathered_chiseled_copper", + "waweatheredchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waweatheredcicoblock": "waxed_weathered_chiseled_copper", + "waweatheredcicopblock": "waxed_weathered_chiseled_copper", + "waweatheredcicopperblock": "waxed_weathered_chiseled_copper", + "waweatheredcirclecoblock": "waxed_weathered_chiseled_copper", + "waweatheredcirclecopblock": "waxed_weathered_chiseled_copper", + "waweatheredcirclecopperblock": "waxed_weathered_chiseled_copper", + "wawechiseledcoblock": "waxed_weathered_chiseled_copper", + "wawechiseledcopblock": "waxed_weathered_chiseled_copper", + "wawechiseledcopperblock": "waxed_weathered_chiseled_copper", + "wawecicoblock": "waxed_weathered_chiseled_copper", + "wawecicopblock": "waxed_weathered_chiseled_copper", + "wawecicopperblock": "waxed_weathered_chiseled_copper", + "wawecirclecoblock": "waxed_weathered_chiseled_copper", + "wawecirclecopblock": "waxed_weathered_chiseled_copper", + "wawecirclecopperblock": "waxed_weathered_chiseled_copper", + "wawthchiseledcoblock": "waxed_weathered_chiseled_copper", + "wawthchiseledcopblock": "waxed_weathered_chiseled_copper", + "wawthchiseledcopperblock": "waxed_weathered_chiseled_copper", + "wawthcicoblock": "waxed_weathered_chiseled_copper", + "wawthcicopblock": "waxed_weathered_chiseled_copper", + "wawthcicopperblock": "waxed_weathered_chiseled_copper", + "wawthcirclecoblock": "waxed_weathered_chiseled_copper", + "wawthcirclecopblock": "waxed_weathered_chiseled_copper", + "wawthcirclecopperblock": "waxed_weathered_chiseled_copper", + "waxchiseledweathercoblock": "waxed_weathered_chiseled_copper", + "waxchiseledweathercopblock": "waxed_weathered_chiseled_copper", + "waxchiseledweathercopperblock": "waxed_weathered_chiseled_copper", + "waxchiseledweatheredcoblock": "waxed_weathered_chiseled_copper", + "waxchiseledweatheredcopblock": "waxed_weathered_chiseled_copper", + "waxchiseledweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waxchiseledwecoblock": "waxed_weathered_chiseled_copper", + "waxchiseledwecopblock": "waxed_weathered_chiseled_copper", + "waxchiseledwecopperblock": "waxed_weathered_chiseled_copper", + "waxchiseledwthcoblock": "waxed_weathered_chiseled_copper", + "waxchiseledwthcopblock": "waxed_weathered_chiseled_copper", + "waxchiseledwthcopperblock": "waxed_weathered_chiseled_copper", + "waxcircleweathercoblock": "waxed_weathered_chiseled_copper", + "waxcircleweathercopblock": "waxed_weathered_chiseled_copper", + "waxcircleweathercopperblock": "waxed_weathered_chiseled_copper", + "waxcircleweatheredcoblock": "waxed_weathered_chiseled_copper", + "waxcircleweatheredcopblock": "waxed_weathered_chiseled_copper", + "waxcircleweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waxcirclewecoblock": "waxed_weathered_chiseled_copper", + "waxcirclewecopblock": "waxed_weathered_chiseled_copper", + "waxcirclewecopperblock": "waxed_weathered_chiseled_copper", + "waxcirclewthcoblock": "waxed_weathered_chiseled_copper", + "waxcirclewthcopblock": "waxed_weathered_chiseled_copper", + "waxcirclewthcopperblock": "waxed_weathered_chiseled_copper", + "waxciweathercoblock": "waxed_weathered_chiseled_copper", + "waxciweathercopblock": "waxed_weathered_chiseled_copper", + "waxciweathercopperblock": "waxed_weathered_chiseled_copper", + "waxciweatheredcoblock": "waxed_weathered_chiseled_copper", + "waxciweatheredcopblock": "waxed_weathered_chiseled_copper", + "waxciweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waxciwecoblock": "waxed_weathered_chiseled_copper", + "waxciwecopblock": "waxed_weathered_chiseled_copper", + "waxciwecopperblock": "waxed_weathered_chiseled_copper", + "waxciwthcoblock": "waxed_weathered_chiseled_copper", + "waxciwthcopblock": "waxed_weathered_chiseled_copper", + "waxciwthcopperblock": "waxed_weathered_chiseled_copper", + "waxedchiseledweathercoblock": "waxed_weathered_chiseled_copper", + "waxedchiseledweathercopblock": "waxed_weathered_chiseled_copper", + "waxedchiseledweathercopperblock": "waxed_weathered_chiseled_copper", + "waxedchiseledweatheredcoblock": "waxed_weathered_chiseled_copper", + "waxedchiseledweatheredcopblock": "waxed_weathered_chiseled_copper", + "waxedchiseledweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waxedchiseledwecoblock": "waxed_weathered_chiseled_copper", + "waxedchiseledwecopblock": "waxed_weathered_chiseled_copper", + "waxedchiseledwecopperblock": "waxed_weathered_chiseled_copper", + "waxedchiseledwthcoblock": "waxed_weathered_chiseled_copper", + "waxedchiseledwthcopblock": "waxed_weathered_chiseled_copper", + "waxedchiseledwthcopperblock": "waxed_weathered_chiseled_copper", + "waxedcircleweathercoblock": "waxed_weathered_chiseled_copper", + "waxedcircleweathercopblock": "waxed_weathered_chiseled_copper", + "waxedcircleweathercopperblock": "waxed_weathered_chiseled_copper", + "waxedcircleweatheredcoblock": "waxed_weathered_chiseled_copper", + "waxedcircleweatheredcopblock": "waxed_weathered_chiseled_copper", + "waxedcircleweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waxedcirclewecoblock": "waxed_weathered_chiseled_copper", + "waxedcirclewecopblock": "waxed_weathered_chiseled_copper", + "waxedcirclewecopperblock": "waxed_weathered_chiseled_copper", + "waxedcirclewthcoblock": "waxed_weathered_chiseled_copper", + "waxedcirclewthcopblock": "waxed_weathered_chiseled_copper", + "waxedcirclewthcopperblock": "waxed_weathered_chiseled_copper", + "waxedciweathercoblock": "waxed_weathered_chiseled_copper", + "waxedciweathercopblock": "waxed_weathered_chiseled_copper", + "waxedciweathercopperblock": "waxed_weathered_chiseled_copper", + "waxedciweatheredcoblock": "waxed_weathered_chiseled_copper", + "waxedciweatheredcopblock": "waxed_weathered_chiseled_copper", + "waxedciweatheredcopperblock": "waxed_weathered_chiseled_copper", + "waxedciwecoblock": "waxed_weathered_chiseled_copper", + "waxedciwecopblock": "waxed_weathered_chiseled_copper", + "waxedciwecopperblock": "waxed_weathered_chiseled_copper", + "waxedciwthcoblock": "waxed_weathered_chiseled_copper", + "waxedciwthcopblock": "waxed_weathered_chiseled_copper", + "waxedciwthcopperblock": "waxed_weathered_chiseled_copper", + "waxedweatherchiseledcoblock": "waxed_weathered_chiseled_copper", + "waxedweatherchiseledcopblock": "waxed_weathered_chiseled_copper", + "waxedweatherchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxedweathercicoblock": "waxed_weathered_chiseled_copper", + "waxedweathercicopblock": "waxed_weathered_chiseled_copper", + "waxedweathercicopperblock": "waxed_weathered_chiseled_copper", + "waxedweathercirclecoblock": "waxed_weathered_chiseled_copper", + "waxedweathercirclecopblock": "waxed_weathered_chiseled_copper", + "waxedweathercirclecopperblock": "waxed_weathered_chiseled_copper", + "waxedweatheredchiseledcoblock": "waxed_weathered_chiseled_copper", + "waxedweatheredchiseledcopblock": "waxed_weathered_chiseled_copper", + "waxedweatheredchiseledcopper": "waxed_weathered_chiseled_copper", + "waxedweatheredchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxedweatheredcicoblock": "waxed_weathered_chiseled_copper", + "waxedweatheredcicopblock": "waxed_weathered_chiseled_copper", + "waxedweatheredcicopperblock": "waxed_weathered_chiseled_copper", + "waxedweatheredcirclecoblock": "waxed_weathered_chiseled_copper", + "waxedweatheredcirclecopblock": "waxed_weathered_chiseled_copper", + "waxedweatheredcirclecopperblock": "waxed_weathered_chiseled_copper", + "waxedwechiseledcoblock": "waxed_weathered_chiseled_copper", + "waxedwechiseledcopblock": "waxed_weathered_chiseled_copper", + "waxedwechiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxedwecicoblock": "waxed_weathered_chiseled_copper", + "waxedwecicopblock": "waxed_weathered_chiseled_copper", + "waxedwecicopperblock": "waxed_weathered_chiseled_copper", + "waxedwecirclecoblock": "waxed_weathered_chiseled_copper", + "waxedwecirclecopblock": "waxed_weathered_chiseled_copper", + "waxedwecirclecopperblock": "waxed_weathered_chiseled_copper", + "waxedwthchiseledcoblock": "waxed_weathered_chiseled_copper", + "waxedwthchiseledcopblock": "waxed_weathered_chiseled_copper", + "waxedwthchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxedwthcicoblock": "waxed_weathered_chiseled_copper", + "waxedwthcicopblock": "waxed_weathered_chiseled_copper", + "waxedwthcicopperblock": "waxed_weathered_chiseled_copper", + "waxedwthcirclecoblock": "waxed_weathered_chiseled_copper", + "waxedwthcirclecopblock": "waxed_weathered_chiseled_copper", + "waxedwthcirclecopperblock": "waxed_weathered_chiseled_copper", + "waxweatherchiseledcoblock": "waxed_weathered_chiseled_copper", + "waxweatherchiseledcopblock": "waxed_weathered_chiseled_copper", + "waxweatherchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxweathercicoblock": "waxed_weathered_chiseled_copper", + "waxweathercicopblock": "waxed_weathered_chiseled_copper", + "waxweathercicopperblock": "waxed_weathered_chiseled_copper", + "waxweathercirclecoblock": "waxed_weathered_chiseled_copper", + "waxweathercirclecopblock": "waxed_weathered_chiseled_copper", + "waxweathercirclecopperblock": "waxed_weathered_chiseled_copper", + "waxweatheredchiseledcoblock": "waxed_weathered_chiseled_copper", + "waxweatheredchiseledcopblock": "waxed_weathered_chiseled_copper", + "waxweatheredchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxweatheredcicoblock": "waxed_weathered_chiseled_copper", + "waxweatheredcicopblock": "waxed_weathered_chiseled_copper", + "waxweatheredcicopperblock": "waxed_weathered_chiseled_copper", + "waxweatheredcirclecoblock": "waxed_weathered_chiseled_copper", + "waxweatheredcirclecopblock": "waxed_weathered_chiseled_copper", + "waxweatheredcirclecopperblock": "waxed_weathered_chiseled_copper", + "waxwechiseledcoblock": "waxed_weathered_chiseled_copper", + "waxwechiseledcopblock": "waxed_weathered_chiseled_copper", + "waxwechiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxwecicoblock": "waxed_weathered_chiseled_copper", + "waxwecicopblock": "waxed_weathered_chiseled_copper", + "waxwecicopperblock": "waxed_weathered_chiseled_copper", + "waxwecirclecoblock": "waxed_weathered_chiseled_copper", + "waxwecirclecopblock": "waxed_weathered_chiseled_copper", + "waxwecirclecopperblock": "waxed_weathered_chiseled_copper", + "waxwthchiseledcoblock": "waxed_weathered_chiseled_copper", + "waxwthchiseledcopblock": "waxed_weathered_chiseled_copper", + "waxwthchiseledcopperblock": "waxed_weathered_chiseled_copper", + "waxwthcicoblock": "waxed_weathered_chiseled_copper", + "waxwthcicopblock": "waxed_weathered_chiseled_copper", + "waxwthcicopperblock": "waxed_weathered_chiseled_copper", + "waxwthcirclecoblock": "waxed_weathered_chiseled_copper", + "waxwthcirclecopblock": "waxed_weathered_chiseled_copper", + "waxwthcirclecopperblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwacoblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwacopblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwacopperblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwaxcoblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwaxcopblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwaxcopperblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwaxedcoblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwaxedcopblock": "waxed_weathered_chiseled_copper", + "weatherchiseledwaxedcopperblock": "waxed_weathered_chiseled_copper", + "weathercirclewacoblock": "waxed_weathered_chiseled_copper", + "weathercirclewacopblock": "waxed_weathered_chiseled_copper", + "weathercirclewacopperblock": "waxed_weathered_chiseled_copper", + "weathercirclewaxcoblock": "waxed_weathered_chiseled_copper", + "weathercirclewaxcopblock": "waxed_weathered_chiseled_copper", + "weathercirclewaxcopperblock": "waxed_weathered_chiseled_copper", + "weathercirclewaxedcoblock": "waxed_weathered_chiseled_copper", + "weathercirclewaxedcopblock": "waxed_weathered_chiseled_copper", + "weathercirclewaxedcopperblock": "waxed_weathered_chiseled_copper", + "weatherciwacoblock": "waxed_weathered_chiseled_copper", + "weatherciwacopblock": "waxed_weathered_chiseled_copper", + "weatherciwacopperblock": "waxed_weathered_chiseled_copper", + "weatherciwaxcoblock": "waxed_weathered_chiseled_copper", + "weatherciwaxcopblock": "waxed_weathered_chiseled_copper", + "weatherciwaxcopperblock": "waxed_weathered_chiseled_copper", + "weatherciwaxedcoblock": "waxed_weathered_chiseled_copper", + "weatherciwaxedcopblock": "waxed_weathered_chiseled_copper", + "weatherciwaxedcopperblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwacoblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwacopblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwacopperblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwaxcoblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwaxcopblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwaxcopperblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwaxedcoblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwaxedcopblock": "waxed_weathered_chiseled_copper", + "weatheredchiseledwaxedcopperblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewacoblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewacopblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewacopperblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewaxcoblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewaxcopblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewaxcopperblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewaxedcoblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewaxedcopblock": "waxed_weathered_chiseled_copper", + "weatheredcirclewaxedcopperblock": "waxed_weathered_chiseled_copper", + "weatheredciwacoblock": "waxed_weathered_chiseled_copper", + "weatheredciwacopblock": "waxed_weathered_chiseled_copper", + "weatheredciwacopperblock": "waxed_weathered_chiseled_copper", + "weatheredciwaxcoblock": "waxed_weathered_chiseled_copper", + "weatheredciwaxcopblock": "waxed_weathered_chiseled_copper", + "weatheredciwaxcopperblock": "waxed_weathered_chiseled_copper", + "weatheredciwaxedcoblock": "waxed_weathered_chiseled_copper", + "weatheredciwaxedcopblock": "waxed_weathered_chiseled_copper", + "weatheredciwaxedcopperblock": "waxed_weathered_chiseled_copper", + "weatheredwachiseledcoblock": "waxed_weathered_chiseled_copper", + "weatheredwachiseledcopblock": "waxed_weathered_chiseled_copper", + "weatheredwachiseledcopperblock": "waxed_weathered_chiseled_copper", + "weatheredwacicoblock": "waxed_weathered_chiseled_copper", + "weatheredwacicopblock": "waxed_weathered_chiseled_copper", + "weatheredwacicopperblock": "waxed_weathered_chiseled_copper", + "weatheredwacirclecoblock": "waxed_weathered_chiseled_copper", + "weatheredwacirclecopblock": "waxed_weathered_chiseled_copper", + "weatheredwacirclecopperblock": "waxed_weathered_chiseled_copper", + "weatheredwaxchiseledcoblock": "waxed_weathered_chiseled_copper", + "weatheredwaxchiseledcopblock": "waxed_weathered_chiseled_copper", + "weatheredwaxchiseledcopperblock": "waxed_weathered_chiseled_copper", + "weatheredwaxcicoblock": "waxed_weathered_chiseled_copper", + "weatheredwaxcicopblock": "waxed_weathered_chiseled_copper", + "weatheredwaxcicopperblock": "waxed_weathered_chiseled_copper", + "weatheredwaxcirclecoblock": "waxed_weathered_chiseled_copper", + "weatheredwaxcirclecopblock": "waxed_weathered_chiseled_copper", + "weatheredwaxcirclecopperblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedchiseledcoblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedchiseledcopblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedchiseledcopperblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedcicoblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedcicopblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedcicopperblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedcirclecoblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedcirclecopblock": "waxed_weathered_chiseled_copper", + "weatheredwaxedcirclecopperblock": "waxed_weathered_chiseled_copper", + "weatherwachiseledcoblock": "waxed_weathered_chiseled_copper", + "weatherwachiseledcopblock": "waxed_weathered_chiseled_copper", + "weatherwachiseledcopperblock": "waxed_weathered_chiseled_copper", + "weatherwacicoblock": "waxed_weathered_chiseled_copper", + "weatherwacicopblock": "waxed_weathered_chiseled_copper", + "weatherwacicopperblock": "waxed_weathered_chiseled_copper", + "weatherwacirclecoblock": "waxed_weathered_chiseled_copper", + "weatherwacirclecopblock": "waxed_weathered_chiseled_copper", + "weatherwacirclecopperblock": "waxed_weathered_chiseled_copper", + "weatherwaxchiseledcoblock": "waxed_weathered_chiseled_copper", + "weatherwaxchiseledcopblock": "waxed_weathered_chiseled_copper", + "weatherwaxchiseledcopperblock": "waxed_weathered_chiseled_copper", + "weatherwaxcicoblock": "waxed_weathered_chiseled_copper", + "weatherwaxcicopblock": "waxed_weathered_chiseled_copper", + "weatherwaxcicopperblock": "waxed_weathered_chiseled_copper", + "weatherwaxcirclecoblock": "waxed_weathered_chiseled_copper", + "weatherwaxcirclecopblock": "waxed_weathered_chiseled_copper", + "weatherwaxcirclecopperblock": "waxed_weathered_chiseled_copper", + "weatherwaxedchiseledcoblock": "waxed_weathered_chiseled_copper", + "weatherwaxedchiseledcopblock": "waxed_weathered_chiseled_copper", + "weatherwaxedchiseledcopperblock": "waxed_weathered_chiseled_copper", + "weatherwaxedcicoblock": "waxed_weathered_chiseled_copper", + "weatherwaxedcicopblock": "waxed_weathered_chiseled_copper", + "weatherwaxedcicopperblock": "waxed_weathered_chiseled_copper", + "weatherwaxedcirclecoblock": "waxed_weathered_chiseled_copper", + "weatherwaxedcirclecopblock": "waxed_weathered_chiseled_copper", + "weatherwaxedcirclecopperblock": "waxed_weathered_chiseled_copper", + "wechiseledwacoblock": "waxed_weathered_chiseled_copper", + "wechiseledwacopblock": "waxed_weathered_chiseled_copper", + "wechiseledwacopperblock": "waxed_weathered_chiseled_copper", + "wechiseledwaxcoblock": "waxed_weathered_chiseled_copper", + "wechiseledwaxcopblock": "waxed_weathered_chiseled_copper", + "wechiseledwaxcopperblock": "waxed_weathered_chiseled_copper", + "wechiseledwaxedcoblock": "waxed_weathered_chiseled_copper", + "wechiseledwaxedcopblock": "waxed_weathered_chiseled_copper", + "wechiseledwaxedcopperblock": "waxed_weathered_chiseled_copper", + "wecirclewacoblock": "waxed_weathered_chiseled_copper", + "wecirclewacopblock": "waxed_weathered_chiseled_copper", + "wecirclewacopperblock": "waxed_weathered_chiseled_copper", + "wecirclewaxcoblock": "waxed_weathered_chiseled_copper", + "wecirclewaxcopblock": "waxed_weathered_chiseled_copper", + "wecirclewaxcopperblock": "waxed_weathered_chiseled_copper", + "wecirclewaxedcoblock": "waxed_weathered_chiseled_copper", + "wecirclewaxedcopblock": "waxed_weathered_chiseled_copper", + "wecirclewaxedcopperblock": "waxed_weathered_chiseled_copper", + "weciwacoblock": "waxed_weathered_chiseled_copper", + "weciwacopblock": "waxed_weathered_chiseled_copper", + "weciwacopperblock": "waxed_weathered_chiseled_copper", + "weciwaxcoblock": "waxed_weathered_chiseled_copper", + "weciwaxcopblock": "waxed_weathered_chiseled_copper", + "weciwaxcopperblock": "waxed_weathered_chiseled_copper", + "weciwaxedcoblock": "waxed_weathered_chiseled_copper", + "weciwaxedcopblock": "waxed_weathered_chiseled_copper", + "weciwaxedcopperblock": "waxed_weathered_chiseled_copper", + "wewachiseledcoblock": "waxed_weathered_chiseled_copper", + "wewachiseledcopblock": "waxed_weathered_chiseled_copper", + "wewachiseledcopperblock": "waxed_weathered_chiseled_copper", + "wewacicoblock": "waxed_weathered_chiseled_copper", + "wewacicopblock": "waxed_weathered_chiseled_copper", + "wewacicopperblock": "waxed_weathered_chiseled_copper", + "wewacirclecoblock": "waxed_weathered_chiseled_copper", + "wewacirclecopblock": "waxed_weathered_chiseled_copper", + "wewacirclecopperblock": "waxed_weathered_chiseled_copper", + "wewaxchiseledcoblock": "waxed_weathered_chiseled_copper", + "wewaxchiseledcopblock": "waxed_weathered_chiseled_copper", + "wewaxchiseledcopperblock": "waxed_weathered_chiseled_copper", + "wewaxcicoblock": "waxed_weathered_chiseled_copper", + "wewaxcicopblock": "waxed_weathered_chiseled_copper", + "wewaxcicopperblock": "waxed_weathered_chiseled_copper", + "wewaxcirclecoblock": "waxed_weathered_chiseled_copper", + "wewaxcirclecopblock": "waxed_weathered_chiseled_copper", + "wewaxcirclecopperblock": "waxed_weathered_chiseled_copper", + "wewaxedchiseledcoblock": "waxed_weathered_chiseled_copper", + "wewaxedchiseledcopblock": "waxed_weathered_chiseled_copper", + "wewaxedchiseledcopperblock": "waxed_weathered_chiseled_copper", + "wewaxedcicoblock": "waxed_weathered_chiseled_copper", + "wewaxedcicopblock": "waxed_weathered_chiseled_copper", + "wewaxedcicopperblock": "waxed_weathered_chiseled_copper", + "wewaxedcirclecoblock": "waxed_weathered_chiseled_copper", + "wewaxedcirclecopblock": "waxed_weathered_chiseled_copper", + "wewaxedcirclecopperblock": "waxed_weathered_chiseled_copper", + "wthchiseledwacoblock": "waxed_weathered_chiseled_copper", + "wthchiseledwacopblock": "waxed_weathered_chiseled_copper", + "wthchiseledwacopperblock": "waxed_weathered_chiseled_copper", + "wthchiseledwaxcoblock": "waxed_weathered_chiseled_copper", + "wthchiseledwaxcopblock": "waxed_weathered_chiseled_copper", + "wthchiseledwaxcopperblock": "waxed_weathered_chiseled_copper", + "wthchiseledwaxedcoblock": "waxed_weathered_chiseled_copper", + "wthchiseledwaxedcopblock": "waxed_weathered_chiseled_copper", + "wthchiseledwaxedcopperblock": "waxed_weathered_chiseled_copper", + "wthcirclewacoblock": "waxed_weathered_chiseled_copper", + "wthcirclewacopblock": "waxed_weathered_chiseled_copper", + "wthcirclewacopperblock": "waxed_weathered_chiseled_copper", + "wthcirclewaxcoblock": "waxed_weathered_chiseled_copper", + "wthcirclewaxcopblock": "waxed_weathered_chiseled_copper", + "wthcirclewaxcopperblock": "waxed_weathered_chiseled_copper", + "wthcirclewaxedcoblock": "waxed_weathered_chiseled_copper", + "wthcirclewaxedcopblock": "waxed_weathered_chiseled_copper", + "wthcirclewaxedcopperblock": "waxed_weathered_chiseled_copper", + "wthciwacoblock": "waxed_weathered_chiseled_copper", + "wthciwacopblock": "waxed_weathered_chiseled_copper", + "wthciwacopperblock": "waxed_weathered_chiseled_copper", + "wthciwaxcoblock": "waxed_weathered_chiseled_copper", + "wthciwaxcopblock": "waxed_weathered_chiseled_copper", + "wthciwaxcopperblock": "waxed_weathered_chiseled_copper", + "wthciwaxedcoblock": "waxed_weathered_chiseled_copper", + "wthciwaxedcopblock": "waxed_weathered_chiseled_copper", + "wthciwaxedcopperblock": "waxed_weathered_chiseled_copper", + "wthwachiseledcoblock": "waxed_weathered_chiseled_copper", + "wthwachiseledcopblock": "waxed_weathered_chiseled_copper", + "wthwachiseledcopperblock": "waxed_weathered_chiseled_copper", + "wthwacicoblock": "waxed_weathered_chiseled_copper", + "wthwacicopblock": "waxed_weathered_chiseled_copper", + "wthwacicopperblock": "waxed_weathered_chiseled_copper", + "wthwacirclecoblock": "waxed_weathered_chiseled_copper", + "wthwacirclecopblock": "waxed_weathered_chiseled_copper", + "wthwacirclecopperblock": "waxed_weathered_chiseled_copper", + "wthwaxchiseledcoblock": "waxed_weathered_chiseled_copper", + "wthwaxchiseledcopblock": "waxed_weathered_chiseled_copper", + "wthwaxchiseledcopperblock": "waxed_weathered_chiseled_copper", + "wthwaxcicoblock": "waxed_weathered_chiseled_copper", + "wthwaxcicopblock": "waxed_weathered_chiseled_copper", + "wthwaxcicopperblock": "waxed_weathered_chiseled_copper", + "wthwaxcirclecoblock": "waxed_weathered_chiseled_copper", + "wthwaxcirclecopblock": "waxed_weathered_chiseled_copper", + "wthwaxcirclecopperblock": "waxed_weathered_chiseled_copper", + "wthwaxedchiseledcoblock": "waxed_weathered_chiseled_copper", + "wthwaxedchiseledcopblock": "waxed_weathered_chiseled_copper", + "wthwaxedchiseledcopperblock": "waxed_weathered_chiseled_copper", + "wthwaxedcicoblock": "waxed_weathered_chiseled_copper", + "wthwaxedcicopblock": "waxed_weathered_chiseled_copper", + "wthwaxedcicopperblock": "waxed_weathered_chiseled_copper", + "wthwaxedcirclecoblock": "waxed_weathered_chiseled_copper", + "wthwaxedcirclecopblock": "waxed_weathered_chiseled_copper", + "wthwaxedcirclecopperblock": "waxed_weathered_chiseled_copper", "waxed_weathered_copper": { "material": "WAXED_WEATHERED_COPPER" }, @@ -38477,6 +41839,290 @@ "wthwaxedcoblock": "waxed_weathered_copper", "wthwaxedcopblock": "waxed_weathered_copper", "wthwaxedcopperblock": "waxed_weathered_copper", + "waxed_weathered_copper_bulb": { + "material": "WAXED_WEATHERED_COPPER_BULB" + }, + "minecraft:waxed_weathered_copper_bulb": "waxed_weathered_copper_bulb", + "waweatherbulb": "waxed_weathered_copper_bulb", + "waweatheredbulb": "waxed_weathered_copper_bulb", + "wawebulb": "waxed_weathered_copper_bulb", + "wawthbulb": "waxed_weathered_copper_bulb", + "waxedweatherbulb": "waxed_weathered_copper_bulb", + "waxedweatheredbulb": "waxed_weathered_copper_bulb", + "waxedweatheredcopperbulb": "waxed_weathered_copper_bulb", + "waxedwebulb": "waxed_weathered_copper_bulb", + "waxedwthbulb": "waxed_weathered_copper_bulb", + "waxweatherbulb": "waxed_weathered_copper_bulb", + "waxweatheredbulb": "waxed_weathered_copper_bulb", + "waxwebulb": "waxed_weathered_copper_bulb", + "waxwthbulb": "waxed_weathered_copper_bulb", + "weatheredwabulb": "waxed_weathered_copper_bulb", + "weatheredwaxbulb": "waxed_weathered_copper_bulb", + "weatheredwaxedbulb": "waxed_weathered_copper_bulb", + "weatherwabulb": "waxed_weathered_copper_bulb", + "weatherwaxbulb": "waxed_weathered_copper_bulb", + "weatherwaxedbulb": "waxed_weathered_copper_bulb", + "wewabulb": "waxed_weathered_copper_bulb", + "wewaxbulb": "waxed_weathered_copper_bulb", + "wewaxedbulb": "waxed_weathered_copper_bulb", + "wthwabulb": "waxed_weathered_copper_bulb", + "wthwaxbulb": "waxed_weathered_copper_bulb", + "wthwaxedbulb": "waxed_weathered_copper_bulb", + "waxed_weathered_copper_door": { + "material": "WAXED_WEATHERED_COPPER_DOOR" + }, + "doorwawe": "waxed_weathered_copper_door", + "doorwaweather": "waxed_weathered_copper_door", + "doorwaweathered": "waxed_weathered_copper_door", + "doorwawth": "waxed_weathered_copper_door", + "doorwaxedwe": "waxed_weathered_copper_door", + "doorwaxedweather": "waxed_weathered_copper_door", + "doorwaxedweathered": "waxed_weathered_copper_door", + "doorwaxedwth": "waxed_weathered_copper_door", + "doorwaxwe": "waxed_weathered_copper_door", + "doorwaxweather": "waxed_weathered_copper_door", + "doorwaxweathered": "waxed_weathered_copper_door", + "doorwaxwth": "waxed_weathered_copper_door", + "doorweatheredwa": "waxed_weathered_copper_door", + "doorweatheredwax": "waxed_weathered_copper_door", + "doorweatheredwaxed": "waxed_weathered_copper_door", + "doorweatherwa": "waxed_weathered_copper_door", + "doorweatherwax": "waxed_weathered_copper_door", + "doorweatherwaxed": "waxed_weathered_copper_door", + "doorwewa": "waxed_weathered_copper_door", + "doorwewax": "waxed_weathered_copper_door", + "doorwewaxed": "waxed_weathered_copper_door", + "doorwthwa": "waxed_weathered_copper_door", + "doorwthwax": "waxed_weathered_copper_door", + "doorwthwaxed": "waxed_weathered_copper_door", + "minecraft:waxed_weathered_copper_door": "waxed_weathered_copper_door", + "waweatherdoor": "waxed_weathered_copper_door", + "waweathereddoor": "waxed_weathered_copper_door", + "wawedoor": "waxed_weathered_copper_door", + "wawthdoor": "waxed_weathered_copper_door", + "waxedweatherdoor": "waxed_weathered_copper_door", + "waxedweatheredcopperdoor": "waxed_weathered_copper_door", + "waxedweathereddoor": "waxed_weathered_copper_door", + "waxedwedoor": "waxed_weathered_copper_door", + "waxedwthdoor": "waxed_weathered_copper_door", + "waxweatherdoor": "waxed_weathered_copper_door", + "waxweathereddoor": "waxed_weathered_copper_door", + "waxwedoor": "waxed_weathered_copper_door", + "waxwthdoor": "waxed_weathered_copper_door", + "weatheredwadoor": "waxed_weathered_copper_door", + "weatheredwaxdoor": "waxed_weathered_copper_door", + "weatheredwaxeddoor": "waxed_weathered_copper_door", + "weatherwadoor": "waxed_weathered_copper_door", + "weatherwaxdoor": "waxed_weathered_copper_door", + "weatherwaxeddoor": "waxed_weathered_copper_door", + "wewadoor": "waxed_weathered_copper_door", + "wewaxdoor": "waxed_weathered_copper_door", + "wewaxeddoor": "waxed_weathered_copper_door", + "wthwadoor": "waxed_weathered_copper_door", + "wthwaxdoor": "waxed_weathered_copper_door", + "wthwaxeddoor": "waxed_weathered_copper_door", + "waxed_weathered_copper_grate": { + "material": "WAXED_WEATHERED_COPPER_GRATE" + }, + "minecraft:waxed_weathered_copper_grate": "waxed_weathered_copper_grate", + "waweatheredgrate": "waxed_weathered_copper_grate", + "waweathergrate": "waxed_weathered_copper_grate", + "wawegrate": "waxed_weathered_copper_grate", + "wawthgrate": "waxed_weathered_copper_grate", + "waxedweatheredcoppergrate": "waxed_weathered_copper_grate", + "waxedweatheredgrate": "waxed_weathered_copper_grate", + "waxedweathergrate": "waxed_weathered_copper_grate", + "waxedwegrate": "waxed_weathered_copper_grate", + "waxedwthgrate": "waxed_weathered_copper_grate", + "waxweatheredgrate": "waxed_weathered_copper_grate", + "waxweathergrate": "waxed_weathered_copper_grate", + "waxwegrate": "waxed_weathered_copper_grate", + "waxwthgrate": "waxed_weathered_copper_grate", + "weatheredwagrate": "waxed_weathered_copper_grate", + "weatheredwaxedgrate": "waxed_weathered_copper_grate", + "weatheredwaxgrate": "waxed_weathered_copper_grate", + "weatherwagrate": "waxed_weathered_copper_grate", + "weatherwaxedgrate": "waxed_weathered_copper_grate", + "weatherwaxgrate": "waxed_weathered_copper_grate", + "wewagrate": "waxed_weathered_copper_grate", + "wewaxedgrate": "waxed_weathered_copper_grate", + "wewaxgrate": "waxed_weathered_copper_grate", + "wthwagrate": "waxed_weathered_copper_grate", + "wthwaxedgrate": "waxed_weathered_copper_grate", + "wthwaxgrate": "waxed_weathered_copper_grate", + "waxed_weathered_copper_trapdoor": { + "material": "WAXED_WEATHERED_COPPER_TRAPDOOR" + }, + "minecraft:waxed_weathered_copper_trapdoor": "waxed_weathered_copper_trapdoor", + "waweatherdoort": "waxed_weathered_copper_trapdoor", + "waweatherdoortrap": "waxed_weathered_copper_trapdoor", + "waweatherdtrap": "waxed_weathered_copper_trapdoor", + "waweathereddoort": "waxed_weathered_copper_trapdoor", + "waweathereddoortrap": "waxed_weathered_copper_trapdoor", + "waweathereddtrap": "waxed_weathered_copper_trapdoor", + "waweatheredhatch": "waxed_weathered_copper_trapdoor", + "waweatheredtdoor": "waxed_weathered_copper_trapdoor", + "waweatheredtrapd": "waxed_weathered_copper_trapdoor", + "waweatheredtrapdoor": "waxed_weathered_copper_trapdoor", + "waweatherhatch": "waxed_weathered_copper_trapdoor", + "waweathertdoor": "waxed_weathered_copper_trapdoor", + "waweathertrapd": "waxed_weathered_copper_trapdoor", + "waweathertrapdoor": "waxed_weathered_copper_trapdoor", + "wawedoort": "waxed_weathered_copper_trapdoor", + "wawedoortrap": "waxed_weathered_copper_trapdoor", + "wawedtrap": "waxed_weathered_copper_trapdoor", + "wawehatch": "waxed_weathered_copper_trapdoor", + "wawetdoor": "waxed_weathered_copper_trapdoor", + "wawetrapd": "waxed_weathered_copper_trapdoor", + "wawetrapdoor": "waxed_weathered_copper_trapdoor", + "wawthdoort": "waxed_weathered_copper_trapdoor", + "wawthdoortrap": "waxed_weathered_copper_trapdoor", + "wawthdtrap": "waxed_weathered_copper_trapdoor", + "wawthhatch": "waxed_weathered_copper_trapdoor", + "wawthtdoor": "waxed_weathered_copper_trapdoor", + "wawthtrapd": "waxed_weathered_copper_trapdoor", + "wawthtrapdoor": "waxed_weathered_copper_trapdoor", + "waxedweatherdoort": "waxed_weathered_copper_trapdoor", + "waxedweatherdoortrap": "waxed_weathered_copper_trapdoor", + "waxedweatherdtrap": "waxed_weathered_copper_trapdoor", + "waxedweatheredcoppertrapdoor": "waxed_weathered_copper_trapdoor", + "waxedweathereddoort": "waxed_weathered_copper_trapdoor", + "waxedweathereddoortrap": "waxed_weathered_copper_trapdoor", + "waxedweathereddtrap": "waxed_weathered_copper_trapdoor", + "waxedweatheredhatch": "waxed_weathered_copper_trapdoor", + "waxedweatheredtdoor": "waxed_weathered_copper_trapdoor", + "waxedweatheredtrapd": "waxed_weathered_copper_trapdoor", + "waxedweatheredtrapdoor": "waxed_weathered_copper_trapdoor", + "waxedweatherhatch": "waxed_weathered_copper_trapdoor", + "waxedweathertdoor": "waxed_weathered_copper_trapdoor", + "waxedweathertrapd": "waxed_weathered_copper_trapdoor", + "waxedweathertrapdoor": "waxed_weathered_copper_trapdoor", + "waxedwedoort": "waxed_weathered_copper_trapdoor", + "waxedwedoortrap": "waxed_weathered_copper_trapdoor", + "waxedwedtrap": "waxed_weathered_copper_trapdoor", + "waxedwehatch": "waxed_weathered_copper_trapdoor", + "waxedwetdoor": "waxed_weathered_copper_trapdoor", + "waxedwetrapd": "waxed_weathered_copper_trapdoor", + "waxedwetrapdoor": "waxed_weathered_copper_trapdoor", + "waxedwthdoort": "waxed_weathered_copper_trapdoor", + "waxedwthdoortrap": "waxed_weathered_copper_trapdoor", + "waxedwthdtrap": "waxed_weathered_copper_trapdoor", + "waxedwthhatch": "waxed_weathered_copper_trapdoor", + "waxedwthtdoor": "waxed_weathered_copper_trapdoor", + "waxedwthtrapd": "waxed_weathered_copper_trapdoor", + "waxedwthtrapdoor": "waxed_weathered_copper_trapdoor", + "waxweatherdoort": "waxed_weathered_copper_trapdoor", + "waxweatherdoortrap": "waxed_weathered_copper_trapdoor", + "waxweatherdtrap": "waxed_weathered_copper_trapdoor", + "waxweathereddoort": "waxed_weathered_copper_trapdoor", + "waxweathereddoortrap": "waxed_weathered_copper_trapdoor", + "waxweathereddtrap": "waxed_weathered_copper_trapdoor", + "waxweatheredhatch": "waxed_weathered_copper_trapdoor", + "waxweatheredtdoor": "waxed_weathered_copper_trapdoor", + "waxweatheredtrapd": "waxed_weathered_copper_trapdoor", + "waxweatheredtrapdoor": "waxed_weathered_copper_trapdoor", + "waxweatherhatch": "waxed_weathered_copper_trapdoor", + "waxweathertdoor": "waxed_weathered_copper_trapdoor", + "waxweathertrapd": "waxed_weathered_copper_trapdoor", + "waxweathertrapdoor": "waxed_weathered_copper_trapdoor", + "waxwedoort": "waxed_weathered_copper_trapdoor", + "waxwedoortrap": "waxed_weathered_copper_trapdoor", + "waxwedtrap": "waxed_weathered_copper_trapdoor", + "waxwehatch": "waxed_weathered_copper_trapdoor", + "waxwetdoor": "waxed_weathered_copper_trapdoor", + "waxwetrapd": "waxed_weathered_copper_trapdoor", + "waxwetrapdoor": "waxed_weathered_copper_trapdoor", + "waxwthdoort": "waxed_weathered_copper_trapdoor", + "waxwthdoortrap": "waxed_weathered_copper_trapdoor", + "waxwthdtrap": "waxed_weathered_copper_trapdoor", + "waxwthhatch": "waxed_weathered_copper_trapdoor", + "waxwthtdoor": "waxed_weathered_copper_trapdoor", + "waxwthtrapd": "waxed_weathered_copper_trapdoor", + "waxwthtrapdoor": "waxed_weathered_copper_trapdoor", + "weatheredwadoort": "waxed_weathered_copper_trapdoor", + "weatheredwadoortrap": "waxed_weathered_copper_trapdoor", + "weatheredwadtrap": "waxed_weathered_copper_trapdoor", + "weatheredwahatch": "waxed_weathered_copper_trapdoor", + "weatheredwatdoor": "waxed_weathered_copper_trapdoor", + "weatheredwatrapd": "waxed_weathered_copper_trapdoor", + "weatheredwatrapdoor": "waxed_weathered_copper_trapdoor", + "weatheredwaxdoort": "waxed_weathered_copper_trapdoor", + "weatheredwaxdoortrap": "waxed_weathered_copper_trapdoor", + "weatheredwaxdtrap": "waxed_weathered_copper_trapdoor", + "weatheredwaxeddoort": "waxed_weathered_copper_trapdoor", + "weatheredwaxeddoortrap": "waxed_weathered_copper_trapdoor", + "weatheredwaxeddtrap": "waxed_weathered_copper_trapdoor", + "weatheredwaxedhatch": "waxed_weathered_copper_trapdoor", + "weatheredwaxedtdoor": "waxed_weathered_copper_trapdoor", + "weatheredwaxedtrapd": "waxed_weathered_copper_trapdoor", + "weatheredwaxedtrapdoor": "waxed_weathered_copper_trapdoor", + "weatheredwaxhatch": "waxed_weathered_copper_trapdoor", + "weatheredwaxtdoor": "waxed_weathered_copper_trapdoor", + "weatheredwaxtrapd": "waxed_weathered_copper_trapdoor", + "weatheredwaxtrapdoor": "waxed_weathered_copper_trapdoor", + "weatherwadoort": "waxed_weathered_copper_trapdoor", + "weatherwadoortrap": "waxed_weathered_copper_trapdoor", + "weatherwadtrap": "waxed_weathered_copper_trapdoor", + "weatherwahatch": "waxed_weathered_copper_trapdoor", + "weatherwatdoor": "waxed_weathered_copper_trapdoor", + "weatherwatrapd": "waxed_weathered_copper_trapdoor", + "weatherwatrapdoor": "waxed_weathered_copper_trapdoor", + "weatherwaxdoort": "waxed_weathered_copper_trapdoor", + "weatherwaxdoortrap": "waxed_weathered_copper_trapdoor", + "weatherwaxdtrap": "waxed_weathered_copper_trapdoor", + "weatherwaxeddoort": "waxed_weathered_copper_trapdoor", + "weatherwaxeddoortrap": "waxed_weathered_copper_trapdoor", + "weatherwaxeddtrap": "waxed_weathered_copper_trapdoor", + "weatherwaxedhatch": "waxed_weathered_copper_trapdoor", + "weatherwaxedtdoor": "waxed_weathered_copper_trapdoor", + "weatherwaxedtrapd": "waxed_weathered_copper_trapdoor", + "weatherwaxedtrapdoor": "waxed_weathered_copper_trapdoor", + "weatherwaxhatch": "waxed_weathered_copper_trapdoor", + "weatherwaxtdoor": "waxed_weathered_copper_trapdoor", + "weatherwaxtrapd": "waxed_weathered_copper_trapdoor", + "weatherwaxtrapdoor": "waxed_weathered_copper_trapdoor", + "wewadoort": "waxed_weathered_copper_trapdoor", + "wewadoortrap": "waxed_weathered_copper_trapdoor", + "wewadtrap": "waxed_weathered_copper_trapdoor", + "wewahatch": "waxed_weathered_copper_trapdoor", + "wewatdoor": "waxed_weathered_copper_trapdoor", + "wewatrapd": "waxed_weathered_copper_trapdoor", + "wewatrapdoor": "waxed_weathered_copper_trapdoor", + "wewaxdoort": "waxed_weathered_copper_trapdoor", + "wewaxdoortrap": "waxed_weathered_copper_trapdoor", + "wewaxdtrap": "waxed_weathered_copper_trapdoor", + "wewaxeddoort": "waxed_weathered_copper_trapdoor", + "wewaxeddoortrap": "waxed_weathered_copper_trapdoor", + "wewaxeddtrap": "waxed_weathered_copper_trapdoor", + "wewaxedhatch": "waxed_weathered_copper_trapdoor", + "wewaxedtdoor": "waxed_weathered_copper_trapdoor", + "wewaxedtrapd": "waxed_weathered_copper_trapdoor", + "wewaxedtrapdoor": "waxed_weathered_copper_trapdoor", + "wewaxhatch": "waxed_weathered_copper_trapdoor", + "wewaxtdoor": "waxed_weathered_copper_trapdoor", + "wewaxtrapd": "waxed_weathered_copper_trapdoor", + "wewaxtrapdoor": "waxed_weathered_copper_trapdoor", + "wthwadoort": "waxed_weathered_copper_trapdoor", + "wthwadoortrap": "waxed_weathered_copper_trapdoor", + "wthwadtrap": "waxed_weathered_copper_trapdoor", + "wthwahatch": "waxed_weathered_copper_trapdoor", + "wthwatdoor": "waxed_weathered_copper_trapdoor", + "wthwatrapd": "waxed_weathered_copper_trapdoor", + "wthwatrapdoor": "waxed_weathered_copper_trapdoor", + "wthwaxdoort": "waxed_weathered_copper_trapdoor", + "wthwaxdoortrap": "waxed_weathered_copper_trapdoor", + "wthwaxdtrap": "waxed_weathered_copper_trapdoor", + "wthwaxeddoort": "waxed_weathered_copper_trapdoor", + "wthwaxeddoortrap": "waxed_weathered_copper_trapdoor", + "wthwaxeddtrap": "waxed_weathered_copper_trapdoor", + "wthwaxedhatch": "waxed_weathered_copper_trapdoor", + "wthwaxedtdoor": "waxed_weathered_copper_trapdoor", + "wthwaxedtrapd": "waxed_weathered_copper_trapdoor", + "wthwaxedtrapdoor": "waxed_weathered_copper_trapdoor", + "wthwaxhatch": "waxed_weathered_copper_trapdoor", + "wthwaxtdoor": "waxed_weathered_copper_trapdoor", + "wthwaxtrapd": "waxed_weathered_copper_trapdoor", + "wthwaxtrapdoor": "waxed_weathered_copper_trapdoor", "waxed_weathered_cut_copper": { "material": "WAXED_WEATHERED_CUT_COPPER" }, @@ -41639,6 +45285,83 @@ "wetarr": "weakness_tipped_arrow", "wetarrow": "weakness_tipped_arrow", "wetippedarrow": "weakness_tipped_arrow", + "weathered_chiseled_copper": { + "material": "WEATHERED_CHISELED_COPPER" + }, + "chiseledweathercoblock": "weathered_chiseled_copper", + "chiseledweathercopblock": "weathered_chiseled_copper", + "chiseledweathercopperblock": "weathered_chiseled_copper", + "chiseledweatheredcoblock": "weathered_chiseled_copper", + "chiseledweatheredcopblock": "weathered_chiseled_copper", + "chiseledweatheredcopperblock": "weathered_chiseled_copper", + "chiseledwecoblock": "weathered_chiseled_copper", + "chiseledwecopblock": "weathered_chiseled_copper", + "chiseledwecopperblock": "weathered_chiseled_copper", + "chiseledwthcoblock": "weathered_chiseled_copper", + "chiseledwthcopblock": "weathered_chiseled_copper", + "chiseledwthcopperblock": "weathered_chiseled_copper", + "circleweathercoblock": "weathered_chiseled_copper", + "circleweathercopblock": "weathered_chiseled_copper", + "circleweathercopperblock": "weathered_chiseled_copper", + "circleweatheredcoblock": "weathered_chiseled_copper", + "circleweatheredcopblock": "weathered_chiseled_copper", + "circleweatheredcopperblock": "weathered_chiseled_copper", + "circlewecoblock": "weathered_chiseled_copper", + "circlewecopblock": "weathered_chiseled_copper", + "circlewecopperblock": "weathered_chiseled_copper", + "circlewthcoblock": "weathered_chiseled_copper", + "circlewthcopblock": "weathered_chiseled_copper", + "circlewthcopperblock": "weathered_chiseled_copper", + "ciweathercoblock": "weathered_chiseled_copper", + "ciweathercopblock": "weathered_chiseled_copper", + "ciweathercopperblock": "weathered_chiseled_copper", + "ciweatheredcoblock": "weathered_chiseled_copper", + "ciweatheredcopblock": "weathered_chiseled_copper", + "ciweatheredcopperblock": "weathered_chiseled_copper", + "ciwecoblock": "weathered_chiseled_copper", + "ciwecopblock": "weathered_chiseled_copper", + "ciwecopperblock": "weathered_chiseled_copper", + "ciwthcoblock": "weathered_chiseled_copper", + "ciwthcopblock": "weathered_chiseled_copper", + "ciwthcopperblock": "weathered_chiseled_copper", + "minecraft:weathered_chiseled_copper": "weathered_chiseled_copper", + "weatherchiseledcoblock": "weathered_chiseled_copper", + "weatherchiseledcopblock": "weathered_chiseled_copper", + "weatherchiseledcopperblock": "weathered_chiseled_copper", + "weathercicoblock": "weathered_chiseled_copper", + "weathercicopblock": "weathered_chiseled_copper", + "weathercicopperblock": "weathered_chiseled_copper", + "weathercirclecoblock": "weathered_chiseled_copper", + "weathercirclecopblock": "weathered_chiseled_copper", + "weathercirclecopperblock": "weathered_chiseled_copper", + "weatheredchiseledcoblock": "weathered_chiseled_copper", + "weatheredchiseledcopblock": "weathered_chiseled_copper", + "weatheredchiseledcopper": "weathered_chiseled_copper", + "weatheredchiseledcopperblock": "weathered_chiseled_copper", + "weatheredcicoblock": "weathered_chiseled_copper", + "weatheredcicopblock": "weathered_chiseled_copper", + "weatheredcicopperblock": "weathered_chiseled_copper", + "weatheredcirclecoblock": "weathered_chiseled_copper", + "weatheredcirclecopblock": "weathered_chiseled_copper", + "weatheredcirclecopperblock": "weathered_chiseled_copper", + "wechiseledcoblock": "weathered_chiseled_copper", + "wechiseledcopblock": "weathered_chiseled_copper", + "wechiseledcopperblock": "weathered_chiseled_copper", + "wecicoblock": "weathered_chiseled_copper", + "wecicopblock": "weathered_chiseled_copper", + "wecicopperblock": "weathered_chiseled_copper", + "wecirclecoblock": "weathered_chiseled_copper", + "wecirclecopblock": "weathered_chiseled_copper", + "wecirclecopperblock": "weathered_chiseled_copper", + "wthchiseledcoblock": "weathered_chiseled_copper", + "wthchiseledcopblock": "weathered_chiseled_copper", + "wthchiseledcopperblock": "weathered_chiseled_copper", + "wthcicoblock": "weathered_chiseled_copper", + "wthcicopblock": "weathered_chiseled_copper", + "wthcicopperblock": "weathered_chiseled_copper", + "wthcirclecoblock": "weathered_chiseled_copper", + "wthcirclecopblock": "weathered_chiseled_copper", + "wthcirclecopperblock": "weathered_chiseled_copper", "weathered_copper": { "material": "WEATHERED_COPPER" }, @@ -41656,6 +45379,70 @@ "wthcoblock": "weathered_copper", "wthcopblock": "weathered_copper", "wthcopperblock": "weathered_copper", + "weathered_copper_bulb": { + "material": "WEATHERED_COPPER_BULB" + }, + "minecraft:weathered_copper_bulb": "weathered_copper_bulb", + "weatherbulb": "weathered_copper_bulb", + "weatheredbulb": "weathered_copper_bulb", + "weatheredcopperbulb": "weathered_copper_bulb", + "webulb": "weathered_copper_bulb", + "wthbulb": "weathered_copper_bulb", + "weathered_copper_door": { + "material": "WEATHERED_COPPER_DOOR" + }, + "doorwe": "weathered_copper_door", + "doorweather": "weathered_copper_door", + "doorweathered": "weathered_copper_door", + "doorwth": "weathered_copper_door", + "minecraft:weathered_copper_door": "weathered_copper_door", + "weatherdoor": "weathered_copper_door", + "weatheredcopperdoor": "weathered_copper_door", + "weathereddoor": "weathered_copper_door", + "wedoor": "weathered_copper_door", + "wthdoor": "weathered_copper_door", + "weathered_copper_grate": { + "material": "WEATHERED_COPPER_GRATE" + }, + "minecraft:weathered_copper_grate": "weathered_copper_grate", + "weatheredcoppergrate": "weathered_copper_grate", + "weatheredgrate": "weathered_copper_grate", + "weathergrate": "weathered_copper_grate", + "wegrate": "weathered_copper_grate", + "wthgrate": "weathered_copper_grate", + "weathered_copper_trapdoor": { + "material": "WEATHERED_COPPER_TRAPDOOR" + }, + "minecraft:weathered_copper_trapdoor": "weathered_copper_trapdoor", + "weatherdoort": "weathered_copper_trapdoor", + "weatherdoortrap": "weathered_copper_trapdoor", + "weatherdtrap": "weathered_copper_trapdoor", + "weatheredcoppertrapdoor": "weathered_copper_trapdoor", + "weathereddoort": "weathered_copper_trapdoor", + "weathereddoortrap": "weathered_copper_trapdoor", + "weathereddtrap": "weathered_copper_trapdoor", + "weatheredhatch": "weathered_copper_trapdoor", + "weatheredtdoor": "weathered_copper_trapdoor", + "weatheredtrapd": "weathered_copper_trapdoor", + "weatheredtrapdoor": "weathered_copper_trapdoor", + "weatherhatch": "weathered_copper_trapdoor", + "weathertdoor": "weathered_copper_trapdoor", + "weathertrapd": "weathered_copper_trapdoor", + "weathertrapdoor": "weathered_copper_trapdoor", + "wedoort": "weathered_copper_trapdoor", + "wedoortrap": "weathered_copper_trapdoor", + "wedtrap": "weathered_copper_trapdoor", + "wehatch": "weathered_copper_trapdoor", + "wetdoor": "weathered_copper_trapdoor", + "wetrapd": "weathered_copper_trapdoor", + "wetrapdoor": "weathered_copper_trapdoor", + "wthdoort": "weathered_copper_trapdoor", + "wthdoortrap": "weathered_copper_trapdoor", + "wthdtrap": "weathered_copper_trapdoor", + "wthhatch": "weathered_copper_trapdoor", + "wthtdoor": "weathered_copper_trapdoor", + "wthtrapd": "weathered_copper_trapdoor", + "wthtrapdoor": "weathered_copper_trapdoor", "weathered_cut_copper": { "material": "WEATHERED_CUT_COPPER" }, @@ -42005,6 +45792,96 @@ "wthcutcopstairs": "weathered_cut_copper_stairs", "wthcutcostair": "weathered_cut_copper_stairs", "wthcutcostairs": "weathered_cut_copper_stairs", + "weaving_lingering_potion": { + "potionData": { + "type": "WEAVING", + "upgraded": false, + "extended": false + }, + "material": "LINGERING_POTION" + }, + "aoepotionweave": "weaving_lingering_potion", + "aoepotionweaving": "weaving_lingering_potion", + "aoepotweave": "weaving_lingering_potion", + "aoepotweaving": "weaving_lingering_potion", + "areapotionweave": "weaving_lingering_potion", + "areapotionweaving": "weaving_lingering_potion", + "areapotweave": "weaving_lingering_potion", + "areapotweaving": "weaving_lingering_potion", + "cloudpotionweave": "weaving_lingering_potion", + "cloudpotionweaving": "weaving_lingering_potion", + "cloudpotweave": "weaving_lingering_potion", + "cloudpotweaving": "weaving_lingering_potion", + "lingerpotweave": "weaving_lingering_potion", + "lingerpotweaving": "weaving_lingering_potion", + "weaveaoepoiont": "weaving_lingering_potion", + "weaveaoepot": "weaving_lingering_potion", + "weaveareapot": "weaving_lingering_potion", + "weaveareapotion": "weaving_lingering_potion", + "weavecloudpot": "weaving_lingering_potion", + "weavecloudpotion": "weaving_lingering_potion", + "weavelingerpot": "weaving_lingering_potion", + "weavingaoepoiont": "weaving_lingering_potion", + "weavingaoepot": "weaving_lingering_potion", + "weavingareapot": "weaving_lingering_potion", + "weavingareapotion": "weaving_lingering_potion", + "weavingcloudpot": "weaving_lingering_potion", + "weavingcloudpotion": "weaving_lingering_potion", + "weavinglingerpot": "weaving_lingering_potion", + "weaving_potion": { + "potionData": { + "type": "WEAVING", + "upgraded": false, + "extended": false + }, + "material": "POTION" + }, + "potionofweave": "weaving_potion", + "potionofweaving": "weaving_potion", + "potofweave": "weaving_potion", + "potofweaving": "weaving_potion", + "weavepot": "weaving_potion", + "weavepotion": "weaving_potion", + "weavingpot": "weaving_potion", + "weavingpotion": "weaving_potion", + "weaving_splash_potion": { + "potionData": { + "type": "WEAVING", + "upgraded": false, + "extended": false + }, + "material": "SPLASH_POTION" + }, + "splashweavepot": "weaving_splash_potion", + "splashweavepotion": "weaving_splash_potion", + "splashweavingpot": "weaving_splash_potion", + "splashweavingpotion": "weaving_splash_potion", + "splweavepot": "weaving_splash_potion", + "splweavepotion": "weaving_splash_potion", + "splweavingpot": "weaving_splash_potion", + "splweavingpotion": "weaving_splash_potion", + "weavesplashpot": "weaving_splash_potion", + "weavesplashpotion": "weaving_splash_potion", + "weavingsplashpot": "weaving_splash_potion", + "weavingsplashpotion": "weaving_splash_potion", + "weaving_tipped_arrow": { + "potionData": { + "type": "WEAVING", + "upgraded": false, + "extended": false + }, + "material": "TIPPED_ARROW" + }, + "arrowweave": "weaving_tipped_arrow", + "arrowweaving": "weaving_tipped_arrow", + "weavearrow": "weaving_tipped_arrow", + "weavetarr": "weaving_tipped_arrow", + "weavetarrow": "weaving_tipped_arrow", + "weavetippedarrow": "weaving_tipped_arrow", + "weavingarrow": "weaving_tipped_arrow", + "weavingtarr": "weaving_tipped_arrow", + "weavingtarrow": "weaving_tipped_arrow", + "weavingtippedarrow": "weaving_tipped_arrow", "weeping_vines": { "material": "WEEPING_VINES" }, @@ -42038,6 +45915,12 @@ "minecraft:white_bed": "white_bed", "wbed": "white_bed", "whitebed": "white_bed", + "white_bundle": { + "material": "WHITE_BUNDLE" + }, + "minecraft:white_bundle": "white_bundle", + "wbundle": "white_bundle", + "whitebundle": "white_bundle", "white_candle": { "material": "WHITE_CANDLE" }, @@ -42169,6 +46052,130 @@ "minecraft:wild_armor_trim_smithing_template": "wild_armor_trim_smithing_template", "wildarmortrimsmithingtemplate": "wild_armor_trim_smithing_template", "wildtrim": "wild_armor_trim_smithing_template", + "wind_charge": { + "material": "WIND_CHARGE" + }, + "minecraft:wind_charge": "wind_charge", + "windcharge": "wind_charge", + "wind_charged_lingering_potion": { + "potionData": { + "type": "WIND_CHARGED", + "upgraded": false, + "extended": false + }, + "material": "LINGERING_POTION" + }, + "aoepotionwc": "wind_charged_lingering_potion", + "aoepotionwind": "wind_charged_lingering_potion", + "aoepotionwindcharged": "wind_charged_lingering_potion", + "aoepotwc": "wind_charged_lingering_potion", + "aoepotwind": "wind_charged_lingering_potion", + "aoepotwindcharged": "wind_charged_lingering_potion", + "areapotionwc": "wind_charged_lingering_potion", + "areapotionwind": "wind_charged_lingering_potion", + "areapotionwindcharged": "wind_charged_lingering_potion", + "areapotwc": "wind_charged_lingering_potion", + "areapotwind": "wind_charged_lingering_potion", + "areapotwindcharged": "wind_charged_lingering_potion", + "cloudpotionwc": "wind_charged_lingering_potion", + "cloudpotionwind": "wind_charged_lingering_potion", + "cloudpotionwindcharged": "wind_charged_lingering_potion", + "cloudpotwc": "wind_charged_lingering_potion", + "cloudpotwind": "wind_charged_lingering_potion", + "cloudpotwindcharged": "wind_charged_lingering_potion", + "lingerpotwc": "wind_charged_lingering_potion", + "lingerpotwind": "wind_charged_lingering_potion", + "lingerpotwindcharged": "wind_charged_lingering_potion", + "wcaoepoiont": "wind_charged_lingering_potion", + "wcaoepot": "wind_charged_lingering_potion", + "wcareapot": "wind_charged_lingering_potion", + "wcareapotion": "wind_charged_lingering_potion", + "wccloudpot": "wind_charged_lingering_potion", + "wccloudpotion": "wind_charged_lingering_potion", + "wclingerpot": "wind_charged_lingering_potion", + "windaoepoiont": "wind_charged_lingering_potion", + "windaoepot": "wind_charged_lingering_potion", + "windareapot": "wind_charged_lingering_potion", + "windareapotion": "wind_charged_lingering_potion", + "windchargedaoepoiont": "wind_charged_lingering_potion", + "windchargedaoepot": "wind_charged_lingering_potion", + "windchargedareapot": "wind_charged_lingering_potion", + "windchargedareapotion": "wind_charged_lingering_potion", + "windchargedcloudpot": "wind_charged_lingering_potion", + "windchargedcloudpotion": "wind_charged_lingering_potion", + "windchargedlingerpot": "wind_charged_lingering_potion", + "windcloudpot": "wind_charged_lingering_potion", + "windcloudpotion": "wind_charged_lingering_potion", + "windlingerpot": "wind_charged_lingering_potion", + "wind_charged_potion": { + "potionData": { + "type": "WIND_CHARGED", + "upgraded": false, + "extended": false + }, + "material": "POTION" + }, + "potionofwc": "wind_charged_potion", + "potionofwind": "wind_charged_potion", + "potionofwindcharged": "wind_charged_potion", + "potofwc": "wind_charged_potion", + "potofwind": "wind_charged_potion", + "potofwindcharged": "wind_charged_potion", + "wcpot": "wind_charged_potion", + "wcpotion": "wind_charged_potion", + "windchargedpot": "wind_charged_potion", + "windchargedpotion": "wind_charged_potion", + "windpot": "wind_charged_potion", + "windpotion": "wind_charged_potion", + "wind_charged_splash_potion": { + "potionData": { + "type": "WIND_CHARGED", + "upgraded": false, + "extended": false + }, + "material": "SPLASH_POTION" + }, + "splashwcpot": "wind_charged_splash_potion", + "splashwcpotion": "wind_charged_splash_potion", + "splashwindchargedpot": "wind_charged_splash_potion", + "splashwindchargedpotion": "wind_charged_splash_potion", + "splashwindpot": "wind_charged_splash_potion", + "splashwindpotion": "wind_charged_splash_potion", + "splwcpot": "wind_charged_splash_potion", + "splwcpotion": "wind_charged_splash_potion", + "splwindchargedpot": "wind_charged_splash_potion", + "splwindchargedpotion": "wind_charged_splash_potion", + "splwindpot": "wind_charged_splash_potion", + "splwindpotion": "wind_charged_splash_potion", + "wcsplashpot": "wind_charged_splash_potion", + "wcsplashpotion": "wind_charged_splash_potion", + "windchargedsplashpot": "wind_charged_splash_potion", + "windchargedsplashpotion": "wind_charged_splash_potion", + "windsplashpot": "wind_charged_splash_potion", + "windsplashpotion": "wind_charged_splash_potion", + "wind_charged_tipped_arrow": { + "potionData": { + "type": "WIND_CHARGED", + "upgraded": false, + "extended": false + }, + "material": "TIPPED_ARROW" + }, + "arrowwc": "wind_charged_tipped_arrow", + "arrowwind": "wind_charged_tipped_arrow", + "arrowwindcharged": "wind_charged_tipped_arrow", + "wcarrow": "wind_charged_tipped_arrow", + "wctarr": "wind_charged_tipped_arrow", + "wctarrow": "wind_charged_tipped_arrow", + "wctippedarrow": "wind_charged_tipped_arrow", + "windarrow": "wind_charged_tipped_arrow", + "windchargedarrow": "wind_charged_tipped_arrow", + "windchargedtarr": "wind_charged_tipped_arrow", + "windchargedtarrow": "wind_charged_tipped_arrow", + "windchargedtippedarrow": "wind_charged_tipped_arrow", + "windtarr": "wind_charged_tipped_arrow", + "windtarrow": "wind_charged_tipped_arrow", + "windtippedarrow": "wind_charged_tipped_arrow", "witch_spawn_egg": { "material": "WITCH_SPAWN_EGG" }, @@ -42340,6 +46347,11 @@ "withermonsterspawner": "wither_spawner", "withermspawner": "wither_spawner", "witherspawner": "wither_spawner", + "wolf_armor": { + "material": "WOLF_ARMOR" + }, + "minecraft:wolf_armor": "wolf_armor", + "wolfarmor": "wolf_armor", "wolf_spawn_egg": { "material": "WOLF_SPAWN_EGG" }, @@ -42443,6 +46455,12 @@ "minecraft:yellow_bed": "yellow_bed", "ybed": "yellow_bed", "yellowbed": "yellow_bed", + "yellow_bundle": { + "material": "YELLOW_BUNDLE" + }, + "minecraft:yellow_bundle": "yellow_bundle", + "ybundle": "yellow_bundle", + "yellowbundle": "yellow_bundle", "yellow_candle": { "material": "YELLOW_CANDLE" }, diff --git a/Essentials/src/main/resources/tpr.yml b/Essentials/src/main/resources/tpr.yml index fcf721e7dd6..fdaf3c7209b 100644 --- a/Essentials/src/main/resources/tpr.yml +++ b/Essentials/src/main/resources/tpr.yml @@ -1,6 +1,6 @@ # Configuration for the random teleport command. # Some settings may be defaulted, and can be changed via the /settpr command in-game. -min-range: 0.0 +default-location: '{world}' excluded-biomes: - cold_ocean - deep_cold_ocean diff --git a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java index f593840d779..06986d62698 100644 --- a/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java +++ b/EssentialsChat/src/main/java/com/earth2me/essentials/chat/processing/AbstractChatHandler.java @@ -218,7 +218,7 @@ protected void handleChatRecipients(AsyncPlayerChatEvent event) { // Strip local chat prefix to preserve API behaviour final String localPrefix = AdventureUtil.miniToLegacy(tlLiteral("chatTypeLocal")); - String baseFormat = event.getFormat(); + String baseFormat = AdventureUtil.legacyToMini(event.getFormat()); if (event.getFormat().startsWith(localPrefix)) { baseFormat = baseFormat.substring(localPrefix.length()); } diff --git a/EssentialsDiscord/build.gradle b/EssentialsDiscord/build.gradle index 555fec855cf..854011f8da3 100644 --- a/EssentialsDiscord/build.gradle +++ b/EssentialsDiscord/build.gradle @@ -4,15 +4,15 @@ plugins { dependencies { compileOnly project(':EssentialsX') - implementation('net.dv8tion:JDA:5.0.0-beta.12') { + implementation('net.dv8tion:JDA:5.1.2') { exclude(module: 'opus-java') } implementation 'com.github.MinnDevelopment:emoji-java:v6.1.0' - implementation('club.minnced:discord-webhooks:0.8.2') { + implementation('club.minnced:discord-webhooks:0.8.4') { exclude(module: 'okhttp') } compileOnly 'org.apache.logging.log4j:log4j-core:2.17.1' - compileOnly 'me.clip:placeholderapi:2.10.9' + compileOnly 'me.clip:placeholderapi:2.11.6' } shadowJar { @@ -24,7 +24,7 @@ shadowJar { include(dependency('com.squareup.okio:okio')) include(dependency('com.squareup.okio:okio-jvm')) include(dependency('org.apache.commons:commons-collections4')) - include(dependency('net.sf.trove4j:trove4j')) + include(dependency('net.sf.trove4j:core')) include(dependency('com.fasterxml.jackson.core:jackson-databind')) include(dependency('com.fasterxml.jackson.core:jackson-core')) include(dependency('com.fasterxml.jackson.core:jackson-annotations')) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index ebc023d8b9d..2843e55af2b 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java @@ -383,11 +383,10 @@ public void updateTypesRelay() { final Webhook webhook = DiscordUtil.getOrCreateWebhook(channel, DiscordUtil.ADVANCED_RELAY_NAME).join(); if (webhook == null) { - final WrappedWebhookClient current = channelIdToWebhook.get(channel.getId()); + final WrappedWebhookClient current = channelIdToWebhook.remove(channel.getId()); if (current != null) { current.close(); } - channelIdToWebhook.remove(channel.getId()).close(); continue; } typeToChannelId.put(type, channel.getId()); diff --git a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index c4f21315e92..3e1078f54a1 100644 --- a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -12,6 +12,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import java.util.List; @@ -64,6 +65,9 @@ void onPlayerRespawn(final PlayerRespawnEvent event) { return; } } + if (tryRandomTeleport(user, ess.getSettings().getRandomRespawnLocation())) { + return; + } final Location spawn = spawns.getSpawn(user.getGroup()); if (spawn != null) { event.setRespawnLocation(spawn); @@ -102,7 +106,9 @@ private void delayedJoin(final Player player) { final User user = ess.getUser(player); - if (!"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn())) { + final boolean spawnRandomly = tryRandomTeleport(user, ess.getSettings().getRandomSpawnLocation()); + + if (!spawnRandomly && !"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn())) { ess.scheduleSyncDelayedTask(new NewPlayerTeleport(user), 1L); } @@ -158,4 +164,15 @@ public void run() { } } } + + private boolean tryRandomTeleport(final User user, final String name) { + if (!ess.getRandomTeleport().hasLocation(name)) { + return false; + } + ess.getRandomTeleport().getRandomLocation(name).thenAccept(location -> { + final CompletableFuture future = new CompletableFuture<>(); + user.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.PLUGIN, future); + }); + return true; + } } diff --git a/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/Commandxmppspy.java b/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/Commandxmppspy.java index ef586c4b12c..ad6c7d1a540 100644 --- a/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/Commandxmppspy.java +++ b/EssentialsXMPP/src/main/java/com/earth2me/essentials/xmpp/Commandxmppspy.java @@ -1,13 +1,10 @@ package com.earth2me.essentials.xmpp; -import com.earth2me.essentials.ChargeException; import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.User; import com.earth2me.essentials.commands.EssentialsLoopCommand; import com.earth2me.essentials.commands.NotEnoughArgumentsException; -import com.earth2me.essentials.commands.PlayerExemptException; -import com.earth2me.essentials.commands.PlayerNotFoundException; -import net.ess3.api.MaxMoneyException; +import net.ess3.api.TranslatableException; import org.bukkit.Server; public class Commandxmppspy extends EssentialsLoopCommand { @@ -16,7 +13,7 @@ public Commandxmppspy() { } @Override - protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws NotEnoughArgumentsException, PlayerExemptException, MaxMoneyException, ChargeException, PlayerNotFoundException { + protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws NotEnoughArgumentsException, TranslatableException { if (args.length == 0) { throw new NotEnoughArgumentsException(); } diff --git a/README.md b/README.md index 6aef88946d2..950277401b9 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ however, have some new requirements: * **EssentialsX requires CraftBukkit, Spigot or Paper to run.** Other server software may work, but these are not tested by the team and we may not be able to help with any issues that occur. * **EssentialsX currently supports Minecraft versions 1.8.8, 1.9.4, 1.10.2, 1.11.2, 1.12.2, 1.13.2, 1.14.4, 1.15.2, - 1.16.5, 1.17.1, 1.18.2, 1.19.4, and 1.20.4.** + 1.16.5, 1.17.1, 1.18.2, 1.19.4, 1.20.6, and 1.21.3.** * **EssentialsX currently requires Java 8 or higher.** We recommend using the latest Java version supported by your server software. * **EssentialsX requires [Vault](http://dev.bukkit.org/bukkit-plugins/vault/) to enable using chat prefix/suffixes and diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index d306fc9d9f9..cf08d3dacf4 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -8,6 +8,6 @@ repositories { dependencies { implementation("net.kyori", "indra-common", "3.1.3") - implementation("com.github.johnrengelman", "shadow", "8.1.1") - implementation("xyz.jpenilla", "run-task", "2.2.3") + implementation("com.gradleup.shadow", "shadow-gradle-plugin", "8.3.3") + implementation("xyz.jpenilla", "run-task", "2.3.1") } diff --git a/build-logic/src/main/kotlin/constants.kt b/build-logic/src/main/kotlin/constants.kt index f1398887ffd..8fa6e50a655 100644 --- a/build-logic/src/main/kotlin/constants.kt +++ b/build-logic/src/main/kotlin/constants.kt @@ -1 +1 @@ -const val RUN_PAPER_MINECRAFT_VERSION = "1.20.4" +const val RUN_PAPER_MINECRAFT_VERSION = "1.21.1" diff --git a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts index 0a497fed831..7ae8c9c5030 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -10,7 +10,7 @@ plugins { val baseExtension = extensions.create("essentials", project) val checkstyleVersion = "8.36.2" -val spigotVersion = "1.20.4-R0.1-SNAPSHOT" +val spigotVersion = "1.21.3-R0.1-SNAPSHOT" val junit5Version = "5.10.2" val mockitoVersion = "3.12.4" @@ -75,6 +75,9 @@ tasks { } withType { archiveVersion.set(rootProject.ext["FULL_VERSION"] as String) + manifest { + attributes("paperweight-mappings-namespace" to "mojang") + } } withType { onlyIf { project.hasProperty("forceSign") } @@ -122,7 +125,7 @@ indra { javaVersions { target(8) - minimumToolchain(17) + minimumToolchain(21) // Don't enforce running tests on Java 8; we only care about the release for compiling, not running tests strictVersions(false) } diff --git a/build-logic/src/main/kotlin/essentials.shadow-module.gradle.kts b/build-logic/src/main/kotlin/essentials.shadow-module.gradle.kts index 9ebe51ea404..635084b87b3 100644 --- a/build-logic/src/main/kotlin/essentials.shadow-module.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.shadow-module.gradle.kts @@ -1,6 +1,6 @@ plugins { id("essentials.module-conventions") - id("com.github.johnrengelman.shadow") + id("com.gradleup.shadow") } tasks { @@ -8,7 +8,7 @@ tasks { archiveClassifier.set("unshaded") } shadowJar { - archiveClassifier.set(null) + archiveClassifier.set(null as String?) } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a80b22ce5cf..df97d72b8b9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/providers/1_12Provider/build.gradle b/providers/1_12Provider/build.gradle index e04aa542689..438afeea59e 100644 --- a/providers/1_12Provider/build.gradle +++ b/providers/1_12Provider/build.gradle @@ -3,6 +3,9 @@ plugins { } dependencies { + implementation(project(':providers:BaseProviders')) { + exclude group: "org.spigotmc", module: "spigot-api" + } api project(':providers:NMSReflectionProvider') } diff --git a/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyBannerDataProvider.java b/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyBannerDataProvider.java new file mode 100644 index 00000000000..afd971ffd14 --- /dev/null +++ b/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyBannerDataProvider.java @@ -0,0 +1,26 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.BannerDataProvider; +import org.bukkit.DyeColor; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BannerMeta; + +public class LegacyBannerDataProvider implements BannerDataProvider { + @Override + public DyeColor getBaseColor(ItemStack stack) { + final BannerMeta bannerMeta = (BannerMeta) stack.getItemMeta(); + return bannerMeta.getBaseColor(); + } + + @Override + public void setBaseColor(ItemStack stack, DyeColor color) { + final BannerMeta bannerMeta = (BannerMeta) stack.getItemMeta(); + bannerMeta.setBaseColor(color); + stack.setItemMeta(bannerMeta); + } + + @Override + public String getDescription() { + return "Legacy Banner Meta Provider"; + } +} diff --git a/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyInventoryViewProvider.java b/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyInventoryViewProvider.java new file mode 100644 index 00000000000..1fd5ca68f35 --- /dev/null +++ b/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyInventoryViewProvider.java @@ -0,0 +1,33 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.InventoryViewProvider; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; + +public class LegacyInventoryViewProvider implements InventoryViewProvider { + @Override + public Inventory getTopInventory(InventoryView view) { + return view.getTopInventory(); + } + + @Override + public Inventory getBottomInventory(InventoryView view) { + return view.getBottomInventory(); + } + + @Override + public void setItem(InventoryView view, int slot, ItemStack item) { + view.setItem(slot, item); + } + + @Override + public void close(InventoryView view) { + view.close(); + } + + @Override + public String getDescription() { + return "Legacy InventoryView Abstract Class ABI Provider"; + } +} diff --git a/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java b/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java new file mode 100644 index 00000000000..d28fe62135d --- /dev/null +++ b/providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java @@ -0,0 +1,134 @@ +package net.ess3.provider.providers; + +import com.google.common.collect.ImmutableMap; +import net.ess3.provider.PotionMetaProvider; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionType; + +import java.util.Collection; +import java.util.Map; + +public class LegacyPotionMetaProvider implements PotionMetaProvider { + private static final Map damageValueToType = ImmutableMap.builder() + .put(1, PotionType.REGEN) + .put(2, PotionType.SPEED) + .put(3, PotionType.FIRE_RESISTANCE) + .put(4, PotionType.POISON) + .put(5, PotionType.INSTANT_HEAL) + .put(6, PotionType.NIGHT_VISION) + // Skip 7 + .put(8, PotionType.WEAKNESS) + .put(9, PotionType.STRENGTH) + .put(10, PotionType.SLOWNESS) + .put(11, PotionType.JUMP) + .put(12, PotionType.INSTANT_DAMAGE) + .put(13, PotionType.WATER_BREATHING) + .put(14, PotionType.INVISIBILITY) + .build(); + + private static int getBit(final int n, final int k) { + return (n >> k) & 1; + } + + @Override + public ItemStack createPotionItem(final Material initial, final int effectId) { + ItemStack potion = new ItemStack(initial, 1); + + if (effectId == 0) { + return potion; + } + + final int damageValue = getBit(effectId, 0) + + 2 * getBit(effectId, 1) + + 4 * getBit(effectId, 2) + + 8 * getBit(effectId, 3); + + final PotionType type = damageValueToType.get(damageValue); + if (type == null) { + throw new IllegalArgumentException("Unable to process potion effect ID " + effectId + " with damage value " + damageValue); + } + + //getBit is splash here + if (getBit(effectId, 14) == 1 && initial == Material.POTION) { + potion = new ItemStack(Material.SPLASH_POTION, 1); + } + + final PotionMeta meta = (PotionMeta) potion.getItemMeta(); + //getBit(s) are extended and upgraded respectfully + final PotionData data = new PotionData(type, getBit(effectId, 6) == 1, getBit(effectId, 5) == 1); + meta.setBasePotionData(data); // this method is exclusive to recent 1.9+ + potion.setItemMeta(meta); + + return potion; + } + + @Override + public void setSplashPotion(final ItemStack stack, final boolean isSplash) { + if (stack == null) { + throw new IllegalArgumentException("ItemStack cannot be null"); + } + + if (isSplash && stack.getType() == Material.POTION) { + stack.setType(Material.SPLASH_POTION); + } else if (!isSplash && stack.getType() == Material.SPLASH_POTION) { + stack.setType(Material.POTION); + } + } + + @Override + public boolean isSplashPotion(final ItemStack stack) { + return stack != null && stack.getType() == Material.SPLASH_POTION; + } + + @Override + public Collection getCustomEffects(final ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + return meta.getCustomEffects(); + } + + @Override + public boolean isExtended(final ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + final PotionData data = meta.getBasePotionData(); + return data.isExtended(); + } + + @Override + public boolean isUpgraded(final ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + final PotionData data = meta.getBasePotionData(); + return data.isUpgraded(); + } + + @Override + public PotionType getBasePotionType(final ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + final PotionData data = meta.getBasePotionData(); + return data.getType(); + } + + @Override + public void setBasePotionType(final ItemStack stack, final PotionType type, final boolean extended, final boolean upgraded) { + if (stack == null) { + throw new IllegalArgumentException("ItemStack cannot be null"); + } + + if (extended && upgraded) { + throw new IllegalArgumentException("Potion cannot be both extended and upgraded"); + } + + final PotionData data = new PotionData(type, extended, upgraded); + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + meta.setBasePotionData(data); + stack.setItemMeta(meta); + } + + @Override + public String getDescription() { + return "1.9-1.20.4 Potion Meta Provider"; + } +} diff --git a/providers/1_8Provider/src/main/java/net/ess3/provider/providers/PrehistoricPotionMetaProvider.java b/providers/1_8Provider/src/main/java/net/ess3/provider/providers/PrehistoricPotionMetaProvider.java new file mode 100644 index 00000000000..05dc7ce608b --- /dev/null +++ b/providers/1_8Provider/src/main/java/net/ess3/provider/providers/PrehistoricPotionMetaProvider.java @@ -0,0 +1,85 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.PotionMetaProvider; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.Potion; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionType; + +import java.util.Collection; + +public class PrehistoricPotionMetaProvider implements PotionMetaProvider { + @Override + public ItemStack createPotionItem(final Material initial, final int effectId) { + final ItemStack potion = new ItemStack(initial, 1); + potion.setDurability((short) effectId); + return potion; + } + + @Override + public void setSplashPotion(final ItemStack stack, final boolean isSplash) { + if (stack == null) { + throw new IllegalArgumentException("ItemStack cannot be null"); + } + + final Potion potion = Potion.fromItemStack(stack); + potion.setSplash(isSplash); + potion.apply(stack); + } + + @Override + public boolean isSplashPotion(ItemStack stack) { + return Potion.fromItemStack(stack).isSplash(); + } + + @Override + public Collection getCustomEffects(ItemStack stack) { + return Potion.fromItemStack(stack).getEffects(); + } + + @Override + public boolean isExtended(final ItemStack stack) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isUpgraded(final ItemStack stack) { + throw new UnsupportedOperationException(); + } + + @Override + public PotionType getBasePotionType(final ItemStack stack) { + throw new UnsupportedOperationException(); + } + + @Override + public void setBasePotionType(final ItemStack stack, final PotionType type, final boolean extended, final boolean upgraded) { + if (stack == null) { + throw new IllegalArgumentException("ItemStack cannot be null"); + } + + if (extended && upgraded) { + throw new IllegalArgumentException("Potion cannot be both extended and upgraded"); + } + + final Potion potion = Potion.fromItemStack(stack); + + if (extended && !potion.getType().isInstant()) { + potion.setHasExtendedDuration(true); + potion.setLevel(Math.min(potion.getLevel(), 1)); + } + + if (upgraded && type.getMaxLevel() == 2) { + potion.setLevel(2); + potion.setHasExtendedDuration(false); + } + + potion.apply(stack); + } + + @Override + public String getDescription() { + return "Legacy 1.8 Potion Meta Provider"; + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/BannerDataProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/BannerDataProvider.java new file mode 100644 index 00000000000..eedf2e5f2d9 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/BannerDataProvider.java @@ -0,0 +1,10 @@ +package net.ess3.provider; + +import org.bukkit.DyeColor; +import org.bukkit.inventory.ItemStack; + +public interface BannerDataProvider extends Provider { + DyeColor getBaseColor(ItemStack stack); + + void setBaseColor(ItemStack stack, DyeColor color); +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/InventoryViewProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/InventoryViewProvider.java new file mode 100644 index 00000000000..49ad346120f --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/InventoryViewProvider.java @@ -0,0 +1,19 @@ +package net.ess3.provider; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; + +/** + * Bukkit changed InventoryView to an interface in 1.21. We need to use providers + * to avoid breaking ABI compatibility with earlier versions of Bukkit. + */ +public interface InventoryViewProvider extends Provider { + Inventory getTopInventory(InventoryView view); + + void close(InventoryView view); + + Inventory getBottomInventory(InventoryView view); + + void setItem(InventoryView view, int slot, ItemStack item); +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/PotionMetaProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/PotionMetaProvider.java index 637a470a5d8..f2f35ba9fb1 100644 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/PotionMetaProvider.java +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/PotionMetaProvider.java @@ -2,7 +2,25 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionType; + +import java.util.Collection; public interface PotionMetaProvider extends Provider { ItemStack createPotionItem(Material initial, int effectId); + + void setSplashPotion(ItemStack stack, boolean isSplash); + + boolean isSplashPotion(ItemStack stack); + + Collection getCustomEffects(ItemStack stack); + + boolean isExtended(ItemStack stack); + + boolean isUpgraded(ItemStack stack); + + PotionType getBasePotionType(ItemStack stack); + + void setBasePotionType(ItemStack stack, PotionType type, boolean extended, boolean upgraded); } diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseBannerDataProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseBannerDataProvider.java new file mode 100644 index 00000000000..4fbfb24a799 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseBannerDataProvider.java @@ -0,0 +1,49 @@ +package net.ess3.provider.providers; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import net.ess3.provider.BannerDataProvider; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public class BaseBannerDataProvider implements BannerDataProvider { + private final BiMap materialToDyeMap = HashBiMap.create(); + + public BaseBannerDataProvider() { + materialToDyeMap.put(Material.WHITE_BANNER, DyeColor.WHITE); + materialToDyeMap.put(Material.LIGHT_GRAY_BANNER, DyeColor.LIGHT_GRAY); + materialToDyeMap.put(Material.GRAY_BANNER, DyeColor.GRAY); + materialToDyeMap.put(Material.BLACK_BANNER, DyeColor.BLACK); + materialToDyeMap.put(Material.RED_BANNER, DyeColor.RED); + materialToDyeMap.put(Material.ORANGE_BANNER, DyeColor.ORANGE); + materialToDyeMap.put(Material.YELLOW_BANNER, DyeColor.YELLOW); + materialToDyeMap.put(Material.LIME_BANNER, DyeColor.LIME); + materialToDyeMap.put(Material.GREEN_BANNER, DyeColor.GREEN); + materialToDyeMap.put(Material.CYAN_BANNER, DyeColor.CYAN); + materialToDyeMap.put(Material.LIGHT_BLUE_BANNER, DyeColor.LIGHT_BLUE); + materialToDyeMap.put(Material.BLUE_BANNER, DyeColor.BLUE); + materialToDyeMap.put(Material.PURPLE_BANNER, DyeColor.PURPLE); + materialToDyeMap.put(Material.MAGENTA_BANNER, DyeColor.MAGENTA); + materialToDyeMap.put(Material.PINK_BANNER, DyeColor.PINK); + materialToDyeMap.put(Material.BROWN_BANNER, DyeColor.BROWN); + } + + @Override + public DyeColor getBaseColor(ItemStack stack) { + return materialToDyeMap.get(stack.getType()); + } + + @Override + public void setBaseColor(ItemStack stack, DyeColor color) { + final Material material = materialToDyeMap.inverse().get(color); + if (material != null) { + stack.setType(material); + } + } + + @Override + public String getDescription() { + return "1.20.5+ Banner Data Provider."; + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseInventoryViewProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseInventoryViewProvider.java new file mode 100644 index 00000000000..d6b8194e218 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseInventoryViewProvider.java @@ -0,0 +1,33 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.InventoryViewProvider; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; + +public class BaseInventoryViewProvider implements InventoryViewProvider { + @Override + public Inventory getTopInventory(InventoryView view) { + return view.getTopInventory(); + } + + @Override + public Inventory getBottomInventory(InventoryView view) { + return view.getBottomInventory(); + } + + @Override + public void setItem(InventoryView view, int slot, ItemStack item) { + view.setItem(slot, item); + } + + @Override + public void close(InventoryView view) { + view.close(); + } + + @Override + public String getDescription() { + return "1.21+ InventoryView Interface ABI Provider"; + } +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BasePotionDataProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BasePotionDataProvider.java deleted file mode 100644 index 74b4592a57f..00000000000 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BasePotionDataProvider.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.ess3.provider.providers; - -import com.google.common.collect.ImmutableMap; -import net.ess3.provider.PotionMetaProvider; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionType; - -import java.util.Map; - -public class BasePotionDataProvider implements PotionMetaProvider { - private static final Map damageValueToType = ImmutableMap.builder() - .put(1, PotionType.REGEN) - .put(2, PotionType.SPEED) - .put(3, PotionType.FIRE_RESISTANCE) - .put(4, PotionType.POISON) - .put(5, PotionType.INSTANT_HEAL) - .put(6, PotionType.NIGHT_VISION) - // Skip 7 - .put(8, PotionType.WEAKNESS) - .put(9, PotionType.STRENGTH) - .put(10, PotionType.SLOWNESS) - .put(11, PotionType.JUMP) - .put(12, PotionType.INSTANT_DAMAGE) - .put(13, PotionType.WATER_BREATHING) - .put(14, PotionType.INVISIBILITY) - .build(); - - private static int getBit(final int n, final int k) { - return (n >> k) & 1; - } - - @Override - public ItemStack createPotionItem(final Material initial, final int effectId) { - ItemStack potion = new ItemStack(initial, 1); - - if (effectId == 0) { - return potion; - } - - final int damageValue = getBit(effectId, 0) + - 2 * getBit(effectId, 1) + - 4 * getBit(effectId, 2) + - 8 * getBit(effectId, 3); - - final PotionType type = damageValueToType.get(damageValue); - if (type == null) { - throw new IllegalArgumentException("Unable to process potion effect ID " + effectId + " with damage value " + damageValue); - } - - //getBit is splash here - if (getBit(effectId, 14) == 1 && initial == Material.POTION) { - potion = new ItemStack(Material.SPLASH_POTION, 1); - } - - final PotionMeta meta = (PotionMeta) potion.getItemMeta(); - //getBit(s) are extended and upgraded respectfully - final PotionData data = new PotionData(type, getBit(effectId, 6) == 1, getBit(effectId, 5) == 1); - meta.setBasePotionData(data); // this method is exclusive to recent 1.9+ - potion.setItemMeta(meta); - - return potion; - } - - @Override - public String getDescription() { - return "1.9+ Potion Meta Provider"; - } -} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java deleted file mode 100644 index 2ab157895dd..00000000000 --- a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.ess3.provider.providers; - -import net.ess3.provider.PotionMetaProvider; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; - -@SuppressWarnings("deprecation") -public class LegacyPotionMetaProvider implements PotionMetaProvider { - @Override - public ItemStack createPotionItem(final Material initial, final int effectId) { - final ItemStack potion = new ItemStack(initial, 1); - potion.setDurability((short) effectId); - return potion; - } - - @Override - public String getDescription() { - return "Legacy 1.8 Potion Meta Provider"; - } -} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernPotionMetaProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernPotionMetaProvider.java new file mode 100644 index 00000000000..02ad54cdb2b --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernPotionMetaProvider.java @@ -0,0 +1,107 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.PotionMetaProvider; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionType; + +import java.util.Collection; + +public class ModernPotionMetaProvider implements PotionMetaProvider { + @Override + public ItemStack createPotionItem(Material initial, int effectId) { + throw new UnsupportedOperationException("This should never happen, if this happens please submit a bug report!"); + } + + @Override + public void setBasePotionType(final ItemStack stack, PotionType type, final boolean extended, final boolean upgraded) { + if (stack == null) { + throw new IllegalArgumentException("ItemStack cannot be null"); + } + + if (extended && upgraded) { + throw new IllegalArgumentException("Potion cannot be both extended and upgraded"); + } + + final String name = type.name(); + if (name.startsWith("LONG_")) { + type = PotionType.valueOf(name.substring(5)); + } else if (name.startsWith("STRONG_")) { + type = PotionType.valueOf(name.substring(7)); + } + + if (extended && type.isExtendable()) { + type = PotionType.valueOf("LONG_" + type.name()); + } + + if (upgraded && type.isUpgradeable()) { + type = PotionType.valueOf("STRONG_" + type.name()); + } + + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + //noinspection DataFlowIssue + meta.setBasePotionType(type); + stack.setItemMeta(meta); + } + + @Override + public Collection getCustomEffects(ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + //noinspection DataFlowIssue + return meta.getCustomEffects(); + } + + @Override + public boolean isSplashPotion(ItemStack stack) { + return stack != null && stack.getType() == Material.SPLASH_POTION; + } + + @Override + public boolean isExtended(ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + //noinspection DataFlowIssue + return meta.getBasePotionType().name().startsWith("LONG_"); + } + + @Override + public boolean isUpgraded(ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + //noinspection DataFlowIssue + return meta.getBasePotionType().name().startsWith("STRONG_"); + } + + @Override + public PotionType getBasePotionType(ItemStack stack) { + final PotionMeta meta = (PotionMeta) stack.getItemMeta(); + //noinspection DataFlowIssue + PotionType type = meta.getBasePotionType(); + //noinspection DataFlowIssue + final String name = type.name(); + if (name.startsWith("LONG_")) { + type = PotionType.valueOf(name.substring(5)); + } else if (name.startsWith("STRONG_")) { + type = PotionType.valueOf(name.substring(7)); + } + return type; + } + + @Override + public void setSplashPotion(ItemStack stack, boolean isSplash) { + if (stack == null) { + throw new IllegalArgumentException("ItemStack cannot be null"); + } + + if (isSplash && stack.getType() == Material.POTION) { + stack.setType(Material.SPLASH_POTION); + } else if (!isSplash && stack.getType() == Material.SPLASH_POTION) { + stack.setType(Material.POTION); + } + } + + @Override + public String getDescription() { + return "1.20.5+ Potion Meta Provider"; + } +} diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java index 61a97f38f76..e358cb29efe 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/ReflUtil.java @@ -22,6 +22,7 @@ public final class ReflUtil { public static final NMSVersion V1_18_R1 = NMSVersion.fromString("v1_18_R1"); public static final NMSVersion V1_19_R1 = NMSVersion.fromString("v1_19_R1"); public static final NMSVersion V1_19_R2 = NMSVersion.fromString("v1_19_R2"); + public static final NMSVersion V1_20_R4 = NMSVersion.fromString("v1_20_R4"); private static final Map> classCache = new HashMap<>(); private static final Table, String, Method> methodCache = HashBasedTable.create(); private static final Table, MethodParams, Method> methodParamCache = HashBasedTable.create(); diff --git a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java index d67eb1d4b3c..86711facb66 100644 --- a/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java +++ b/providers/NMSReflectionProvider/src/main/java/net/ess3/nms/refl/providers/ReflServerStateProvider.java @@ -16,7 +16,9 @@ public ReflServerStateProvider() { MethodHandle isRunning = null; final String MDFIVEMAGICLETTER; - if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R2)) { + if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_20_R4)) { + MDFIVEMAGICLETTER = "x"; + } else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R2)) { MDFIVEMAGICLETTER = "v"; } else if (ReflUtil.getNmsVersionObject().isHigherThanOrEqualTo(ReflUtil.V1_19_R1)) { MDFIVEMAGICLETTER = "u"; diff --git a/providers/PaperProvider/build.gradle b/providers/PaperProvider/build.gradle index b66ffd77cfd..8a764dff0b2 100644 --- a/providers/PaperProvider/build.gradle +++ b/providers/PaperProvider/build.gradle @@ -1,6 +1,6 @@ plugins { id("essentials.base-conventions") - id("com.github.johnrengelman.shadow") + id("com.gradleup.shadow") } java {