From 14125d9c4caa95e7e7d0158c7675ebe909fe5af0 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:39:39 -0500 Subject: [PATCH 01/57] Fix format parsing in /spawner (Fixes #5680) --- .../src/main/java/com/earth2me/essentials/Essentials.java | 2 +- .../com/earth2me/essentials/commands/Commandbroadcastworld.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 261a13f46..506ed9165 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -873,7 +873,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { sender.sendMessage(command.getUsage().replace("", commandLabel)); } if (!ex.getMessage().isEmpty()) { - sender.sendMessage(ex.getMessage()); + sender.sendComponent(AdventureUtil.miniMessage().deserialize(ex.getMessage())); } if (ex.getCause() != null && settings.isDebug()) { ex.getCause().printStackTrace(); 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 089883b1c..b9156cf8b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java @@ -39,7 +39,7 @@ public class Commandbroadcastworld extends EssentialsCommand { @Override public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { if (args.length < 2) { - throw new NotEnoughArgumentsException("world"); + throw new NotEnoughArgumentsException(); } final World world = ess.getWorld(args[0]); From 77d505bb4ac7982c6ff12b281d6ed2e3af60b189 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:20:41 -0500 Subject: [PATCH 02/57] Fix format parsing using in-game commands in console (Fixes #5670) --- .../com/earth2me/essentials/commands/EssentialsCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java index 36cdad3e4..187067298 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsCommand.java @@ -10,6 +10,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.ess3.api.IEssentials; +import net.ess3.api.TranslatableException; import org.bukkit.Server; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -180,7 +181,7 @@ public abstract class EssentialsCommand implements IEssentialsCommand { } protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { - throw new Exception(tlLiteral("onlyPlayers", commandLabel)); + throw new TranslatableException("onlyPlayers", commandLabel); } @Override From 80e6f96c710149bca1f8a520381c4519fd8c9057 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:30:19 -0500 Subject: [PATCH 03/57] Fix format parsing in /msg from Discord (Fixes #5671) --- .../discord/interactions/commands/MessageCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java index e85cb4ca4..abfd6b83c 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java @@ -2,6 +2,7 @@ package net.essentialsx.discord.interactions.commands; import com.earth2me.essentials.User; import com.earth2me.essentials.commands.PlayerNotFoundException; +import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.FormatUtil; import net.essentialsx.api.v2.services.discord.InteractionCommandArgument; import net.essentialsx.api.v2.services.discord.InteractionCommandArgumentType; @@ -51,7 +52,7 @@ public class MessageCommand extends InteractionCommandImpl { FormatUtil.replaceFormat(event.getStringArgument("message")) : FormatUtil.stripFormat(event.getStringArgument("message")); event.reply(tlLiteral("msgFormat", tlLiteral("meSender"), MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(message))); - user.sendMessage(tlLiteral("msgFormat", event.getMember().getTag(), user.playerTl("meRecipient"), message)); + user.sendTl("msgFormat", event.getMember().getTag(), AdventureUtil.parsed(user.playerTl("meRecipient")), message); // We use an atomic reference here so that java will garbage collect the recipient final AtomicReference ref = new AtomicReference<>(new DiscordMessageRecipient(event.getMember())); jda.getPlugin().getEss().runTaskLaterAsynchronously(() -> ref.set(null), 6000); // Expires after 5 minutes From d307279b3b332f33fcfd9ebf3c00677cd0d00c05 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:41:15 -0500 Subject: [PATCH 04/57] Fix format parsing in unlinked kick message (Fixes #5667) --- .../essentialsx/discordlink/listeners/LinkBukkitListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java index bb7eee63e..99cdb76b2 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/listeners/LinkBukkitListener.java @@ -60,7 +60,7 @@ public class LinkBukkitListener implements Listener { } catch (IllegalArgumentException e) { code = e.getMessage(); } - event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, tlLiteral("discordLinkLoginKick", "/link " + code, ess.getApi().getInviteUrl())); + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, AdventureUtil.miniToLegacy(tlLiteral("discordLinkLoginKick", "/link " + code, ess.getApi().getInviteUrl()))); } } From 139db29782fe83cb629dcd55967af310d2e90f08 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:49:59 -0500 Subject: [PATCH 05/57] Fix format parsing in various discord commands --- .../api/v2/services/discord/InteractionEvent.java | 7 +++++++ .../interactions/InteractionControllerImpl.java | 2 +- .../discord/interactions/InteractionEventImpl.java | 8 ++++++++ .../discord/interactions/commands/ExecuteCommand.java | 2 +- .../discord/interactions/commands/MessageCommand.java | 10 +++++----- .../commands/discord/AccountInteractionCommand.java | 6 +++--- .../commands/discord/LinkInteractionCommand.java | 6 +++--- .../commands/discord/UnlinkInteractionCommand.java | 4 ++-- 8 files changed, 30 insertions(+), 15 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/InteractionEvent.java b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/InteractionEvent.java index eece3cb36..f66105e27 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/InteractionEvent.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/InteractionEvent.java @@ -10,6 +10,13 @@ public interface InteractionEvent { */ void reply(String message); + /** + * Appends the given string to the initial response message and creates one if it doesn't exist. + * @param tlKey The tlKey of the message to append. + * @param args The args for the message to append. + */ + void replyTl(String tlKey, Object... args); + /** * Gets the member which caused this event. * @return the member which caused the event. diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionControllerImpl.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionControllerImpl.java index ed62f0165..265815972 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionControllerImpl.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionControllerImpl.java @@ -61,7 +61,7 @@ public class InteractionControllerImpl extends ListenerAdapter implements Intera final InteractionEvent interactionEvent = new InteractionEventImpl(event); final List commandSnowflakes = jda.getSettings().getCommandSnowflakes(command.getName()); if (commandSnowflakes != null && !DiscordUtil.hasRoles(event.getMember(), commandSnowflakes)) { - interactionEvent.reply(tlLiteral("noAccessCommand")); + interactionEvent.replyTl("noAccessCommand"); return; } jda.getPlugin().getEss().scheduleSyncDelayedTask(() -> command.onCommand(interactionEvent)); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionEventImpl.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionEventImpl.java index 018916415..ca008c37f 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionEventImpl.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/InteractionEventImpl.java @@ -1,5 +1,6 @@ package net.essentialsx.discord.interactions; +import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.FormatUtil; import com.google.common.base.Joiner; import net.dv8tion.jda.api.entities.Message; @@ -18,6 +19,8 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import static com.earth2me.essentials.I18n.tlLiteral; + /** * A class which provides information about what triggered an interaction event. */ @@ -45,6 +48,11 @@ public class InteractionEventImpl implements InteractionEvent { .queue(null, error -> logger.log(Level.SEVERE, "Error while editing command interaction response", error)); } + @Override + public void replyTl(String tlKey, Object... args) { + reply(AdventureUtil.miniToLegacy(tlLiteral(tlKey, args))); + } + @Override public InteractionMember getMember() { return member; diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ExecuteCommand.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ExecuteCommand.java index 31e8a4efb..09e1a9fad 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ExecuteCommand.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ExecuteCommand.java @@ -21,7 +21,7 @@ public class ExecuteCommand extends InteractionCommandImpl { @Override public void onCommand(final InteractionEvent event) { final String command = event.getStringArgument("command"); - event.reply(tlLiteral("discordCommandExecuteReply", command)); + event.replyTl("discordCommandExecuteReply", command); Bukkit.getScheduler().runTask(jda.getPlugin(), () -> { try { Bukkit.dispatchCommand(new DiscordCommandSender(jda, Bukkit.getConsoleSender(), message -> event.reply(MessageUtil.sanitizeDiscordMarkdown(message))).getSender(), command); diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java index abfd6b83c..94f00faf6 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/MessageCommand.java @@ -31,26 +31,26 @@ public class MessageCommand extends InteractionCommandImpl { try { user = jda.getPlugin().getEss().matchUser(Bukkit.getServer(), null, event.getStringArgument("username"), getHidden, false); } catch (PlayerNotFoundException e) { - event.reply(tlLiteral("errorWithMessage", e.getMessage())); + event.replyTl("errorWithMessage", e.getMessage()); return; } if (!getHidden && user.isIgnoreMsg()) { - event.reply(tlLiteral("msgIgnore", MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()))); + event.replyTl("msgIgnore", MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName())); return; } if (user.isAfk()) { if (user.getAfkMessage() != null) { - event.reply(tlLiteral("userAFKWithMessage", MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(user.getAfkMessage()))); + event.replyTl("userAFKWithMessage", MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(user.getAfkMessage())); } else { - event.reply(tlLiteral("userAFK", MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()))); + event.replyTl("userAFK", MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName())); } } final String message = event.getMember().hasRoles(jda.getSettings().getPermittedFormattingRoles()) ? FormatUtil.replaceFormat(event.getStringArgument("message")) : FormatUtil.stripFormat(event.getStringArgument("message")); - event.reply(tlLiteral("msgFormat", tlLiteral("meSender"), MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(message))); + event.replyTl("msgFormat", tlLiteral("meSender"), MessageUtil.sanitizeDiscordMarkdown(user.getDisplayName()), MessageUtil.sanitizeDiscordMarkdown(message)); user.sendTl("msgFormat", event.getMember().getTag(), AdventureUtil.parsed(user.playerTl("meRecipient")), message); // We use an atomic reference here so that java will garbage collect the recipient diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/AccountInteractionCommand.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/AccountInteractionCommand.java index c9758c964..753223582 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/AccountInteractionCommand.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/AccountInteractionCommand.java @@ -53,14 +53,14 @@ public class AccountInteractionCommand implements InteractionCommand { final InteractionMember effectiveUser = userArg == null ? event.getMember() : userArg; final IUser user = accounts.getUser(effectiveUser.getId()); if (user == null) { - event.reply(tlLiteral(event.getMember().getId().equals(effectiveUser.getId()) ? "discordCommandAccountResponseNotLinked" : "discordCommandAccountResponseNotLinkedOther", effectiveUser.getAsMention())); + event.replyTl(event.getMember().getId().equals(effectiveUser.getId()) ? "discordCommandAccountResponseNotLinked" : "discordCommandAccountResponseNotLinkedOther", effectiveUser.getAsMention()); return; } if (event.getMember().getId().equals(effectiveUser.getId())) { - event.reply(tlLiteral("discordCommandAccountResponseLinked", user.getName())); + event.replyTl("discordCommandAccountResponseLinked", user.getName()); return; } - event.reply(tlLiteral("discordCommandAccountResponseLinkedOther", effectiveUser.getAsMention(), user.getName())); + event.replyTl("discordCommandAccountResponseLinkedOther", effectiveUser.getAsMention(), user.getName()); } } diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/LinkInteractionCommand.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/LinkInteractionCommand.java index befd71c4b..16ca47034 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/LinkInteractionCommand.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/LinkInteractionCommand.java @@ -25,18 +25,18 @@ public class LinkInteractionCommand implements InteractionCommand { @Override public void onCommand(InteractionEvent event) { if (accounts.isLinked(event.getMember().getId())) { - event.reply(tlLiteral("discordCommandLinkHasAccount")); + event.replyTl("discordCommandLinkHasAccount"); return; } final UUID uuid = accounts.getPendingUUID(event.getStringArgument("code")); if (uuid == null) { - event.reply(tlLiteral("discordCommandLinkInvalidCode")); + event.replyTl("discordCommandLinkInvalidCode"); return; } accounts.registerAccount(uuid, event.getMember(), DiscordLinkStatusChangeEvent.Cause.SYNC_PLAYER); - event.reply(tlLiteral("discordCommandLinkLinked")); + event.replyTl("discordCommandLinkLinked"); } @Override diff --git a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/UnlinkInteractionCommand.java b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/UnlinkInteractionCommand.java index 46f344132..b2d26e904 100644 --- a/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/UnlinkInteractionCommand.java +++ b/EssentialsDiscordLink/src/main/java/net/essentialsx/discordlink/commands/discord/UnlinkInteractionCommand.java @@ -20,10 +20,10 @@ public class UnlinkInteractionCommand implements InteractionCommand { @Override public void onCommand(InteractionEvent event) { if (!accounts.removeAccount(event.getMember(), DiscordLinkStatusChangeEvent.Cause.UNSYNC_PLAYER)) { - event.reply(tlLiteral("discordCommandUnlinkInvalidCode")); + event.replyTl("discordCommandUnlinkInvalidCode"); return; } - event.reply(tlLiteral("discordCommandUnlinkUnlinked")); + event.replyTl("discordCommandUnlinkUnlinked"); } @Override From 4386713807d14b217c9d47a211caa2096aee03c5 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 19 Feb 2024 19:37:03 -0500 Subject: [PATCH 06/57] Fix messages not sending after /ess reload (Fixes #5663) --- .../src/main/java/com/earth2me/essentials/Essentials.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 506ed9165..a5e091487 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -635,6 +635,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { public void reload() { Trade.closeLog(); + if (bukkitAudience != null) { + bukkitAudience.close(); + bukkitAudience = null; + } + for (final IConf iConf : confList) { iConf.reloadConfig(); execTimer.mark("Reload(" + iConf.getClass().getSimpleName() + ")"); From 1929d4110af296ee8dbc869b8846b1847ed52403 Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Tue, 20 Feb 2024 16:57:57 -0500 Subject: [PATCH 07/57] Fix format parsing in /heal (Fixes #5690) --- Essentials/src/main/java/com/earth2me/essentials/User.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/User.java b/Essentials/src/main/java/com/earth2me/essentials/User.java index 46e2e03e4..16cabcf3f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/User.java +++ b/Essentials/src/main/java/com/earth2me/essentials/User.java @@ -16,6 +16,7 @@ import com.earth2me.essentials.utils.VersionUtil; import com.google.common.collect.Lists; import net.ess3.api.IEssentials; import net.ess3.api.MaxMoneyException; +import net.ess3.api.TranslatableException; import net.ess3.api.events.AfkStatusChangeEvent; import net.ess3.api.events.JailStatusChangeEvent; import net.ess3.api.events.MuteStatusChangeEvent; @@ -225,7 +226,7 @@ public class User extends UserData implements Comparable, IMessageRecipien cooldownTime.add(Calendar.SECOND, (int) cooldown); cooldownTime.add(Calendar.MILLISECOND, (int) ((cooldown * 1000.0) % 1000.0)); if (cooldownTime.after(now) && !isAuthorized("essentials.heal.cooldown.bypass")) { - throw new Exception(playerTl("timeBeforeHeal", DateUtil.formatDateDiff(cooldownTime.getTimeInMillis()))); + throw new TranslatableException("timeBeforeHeal", DateUtil.formatDateDiff(cooldownTime.getTimeInMillis())); } } setLastHealTimestamp(now.getTimeInMillis()); From 09fa6463a7ff7788621c4d704ade68f10e9e31dd Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sat, 24 Feb 2024 12:28:07 -0800 Subject: [PATCH 08/57] Update GitHub Actions (#5704) Bump actions steps to remove deprecation warnings on GitHub https://github.com/EssentialsX/Essentials/assets/17698576/0d032078-0c36-4362-b680-5a9b30d30345 --- .github/workflows/build-master.yml | 14 +++++++------- .github/workflows/build-pr.yml | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-master.yml b/.github/workflows/build-master.yml index e2c3b7e63..62e0e96f4 100644 --- a/.github/workflows/build-master.yml +++ b/.github/workflows/build-master.yml @@ -16,18 +16,18 @@ jobs: steps: - name: Checkout Git repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 - name: Build with Gradle run: | @@ -35,7 +35,7 @@ jobs: ./gradlew build --stacktrace - name: Archive plugin jars on GitHub - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: EssentialsX plugin jars path: jars/ @@ -61,7 +61,7 @@ jobs: cp -r EssentialsXMPP/build/docs/javadoc/ javadocs/EssentialsXMPP/ - name: Archive Javadocs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: javadocs path: javadocs/ @@ -74,12 +74,12 @@ jobs: steps: - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 16 - name: Download Javadocs - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: javadocs path: javadocs/ diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index fbf6eacd1..5cb330dbb 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -18,18 +18,18 @@ jobs: steps: - name: Checkout Git repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 - name: Build with Gradle run: | @@ -37,7 +37,7 @@ jobs: ./gradlew build --stacktrace - name: Archive plugin jars on GitHub - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: EssentialsX plugin jars path: jars/ From 9be27ad7ac3d63414e123505d3f1d5177b99c2d6 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sat, 24 Feb 2024 12:39:40 -0800 Subject: [PATCH 09/57] Fix custom message colors config not working (#5705) No linked issue; discussed on Discord with @Evidentsinger14 Also @JRoy, I refuse to believe you ever tested this feature, you're trolling --------- Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> --- .../com/earth2me/essentials/Essentials.java | 1 + .../com/earth2me/essentials/Settings.java | 24 +++++++++-------- .../essentials/utils/AdventureUtil.java | 27 ++++++++++--------- .../earth2me/essentials/utils/NumberUtil.java | 9 +++++++ 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index a5e091487..3a54a58bc 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -657,6 +657,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { final PluginManager pm = getServer().getPluginManager(); registerListeners(pm); + AdventureUtil.setEss(this); bukkitAudience = BukkitAudiences.create(this); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 666599a52..5fe884f7a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -53,6 +53,8 @@ import static com.earth2me.essentials.I18n.tlLiteral; public class Settings implements net.ess3.api.ISettings { private static final BigDecimal DEFAULT_MAX_MONEY = new BigDecimal("10000000000000"); private static final BigDecimal DEFAULT_MIN_MONEY = new BigDecimal("-10000000000000"); + private static final Tag DEFAULT_PRIMARY_COLOR = Tag.styling(NamedTextColor.GOLD); + private static final Tag DEFAULT_SECONDARY_COLOR = Tag.styling(NamedTextColor.RED); private final transient EssentialsConfiguration config; private final transient IEssentials ess; private final transient AtomicInteger reloadCount = new AtomicInteger(0); @@ -141,8 +143,8 @@ public class Settings implements net.ess3.api.ISettings { private double maxProjectileSpeed; private boolean removeEffectsOnHeal; private Map worldAliases; - private Tag primaryColor = Tag.styling(NamedTextColor.GOLD); - private Tag secondaryColor = Tag.styling(NamedTextColor.RED); + private Tag primaryColor = DEFAULT_PRIMARY_COLOR; + private Tag secondaryColor = DEFAULT_SECONDARY_COLOR; public Settings(final IEssentials ess) { this.ess = ess; @@ -1970,7 +1972,8 @@ public class Settings implements net.ess3.api.ISettings { private Tag _getPrimaryColor() { final String color = config.getString("message-colors.primary", "#ffaa00"); - return Tag.styling(_getTagColor(color, NamedTextColor.GOLD)); + final TextColor textColor = _getTagColor(color); + return textColor != null ? Tag.styling(textColor) : DEFAULT_PRIMARY_COLOR; } @Override @@ -1980,24 +1983,23 @@ public class Settings implements net.ess3.api.ISettings { private Tag _getSecondaryColor() { final String color = config.getString("message-colors.secondary", "#ff5555"); - return Tag.styling(_getTagColor(color, NamedTextColor.RED)); + final TextColor textColor = _getTagColor(color); + return textColor != null ? Tag.styling(textColor) : DEFAULT_SECONDARY_COLOR; } - private TextColor _getTagColor(final String color, final TextColor def) { + private TextColor _getTagColor(final String color) { try { - if (color.startsWith("#") && color.length() == 7 && NumberUtil.isNumeric(color.substring(1))) { + if (color.startsWith("#") && color.length() == 7 && NumberUtil.isHexadecimal(color.substring(1))) { return TextColor.color(Color.fromRGB(Integer.decode(color)).asRGB()); } if (color.length() == 1) { - final NamedTextColor named = AdventureUtil.fromChar(color.charAt(0)); - return named != null ? named : def; + return AdventureUtil.fromChar(color.charAt(0)); } - final NamedTextColor named = NamedTextColor.NAMES.value(color.toLowerCase(Locale.ENGLISH)); - return named != null ? named : def; + return NamedTextColor.NAMES.value(color.toLowerCase(Locale.ENGLISH)); } catch (IllegalArgumentException ignored) { } - return def; + return null; } } 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 828ee6886..4016504a5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java @@ -15,13 +15,13 @@ import java.util.regex.Pattern; public final class AdventureUtil { private static final LegacyComponentSerializer LEGACY_SERIALIZER; - private static final MiniMessage MINI_MESSAGE_INSTANCE; - private static IEssentials ess; private static final Pattern NAMED_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "[0-9a-fk-orA-FK-OR]"); private static final Pattern HEX_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "x((?:" + ChatColor.COLOR_CHAR + "[0-9a-fA-F]){6})"); private static final String LOOKUP = "0123456789abcdefklmnor"; private static final String[] MINI_TAGS = new String[] {"black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow", "white", "obf", "b", "st", "u", "i", "reset"}; private static final NamedTextColor[] COLORS = new NamedTextColor[] {NamedTextColor.BLACK, NamedTextColor.DARK_BLUE, NamedTextColor.DARK_GREEN, NamedTextColor.DARK_AQUA, NamedTextColor.DARK_RED, NamedTextColor.DARK_PURPLE, NamedTextColor.GOLD, NamedTextColor.GRAY, NamedTextColor.DARK_GRAY, NamedTextColor.BLUE, NamedTextColor.GREEN, NamedTextColor.AQUA, NamedTextColor.RED, NamedTextColor.LIGHT_PURPLE, NamedTextColor.YELLOW, NamedTextColor.WHITE}; + private static IEssentials ess; + private static MiniMessage miniMessageInstance; static { final LegacyComponentSerializer.Builder builder = LegacyComponentSerializer.builder().flattener(ComponentFlattener.basic()).useUnusualXRepeatedCharacterHexFormat(); @@ -29,15 +29,7 @@ public final class AdventureUtil { builder.hexColors(); } LEGACY_SERIALIZER = builder.build(); - - MINI_MESSAGE_INSTANCE = MiniMessage.builder() - .tags(TagResolver.builder() - .resolvers(TagResolver.standard()) - .resolver(TagResolver.resolver("primary", supplyTag(true))) - .resolver(TagResolver.resolver("secondary", supplyTag(false))) - .build()) - .build(); - + miniMessageInstance = createMiniMessageInstance(); } private AdventureUtil() { @@ -45,10 +37,21 @@ public final class AdventureUtil { public static void setEss(final IEssentials ess) { AdventureUtil.ess = ess; + miniMessageInstance = createMiniMessageInstance(); + } + + private static MiniMessage createMiniMessageInstance() { + return MiniMessage.builder() + .tags(TagResolver.builder() + .resolvers(TagResolver.standard()) + .resolver(TagResolver.resolver("primary", supplyTag(true))) + .resolver(TagResolver.resolver("secondary", supplyTag(false))) + .build()) + .build(); } public static MiniMessage miniMessage() { - return MINI_MESSAGE_INSTANCE; + return miniMessageInstance; } /** diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java index 7bd4adcad..9b253e243 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java @@ -129,6 +129,15 @@ public final class NumberUtil { return true; } + public static boolean isHexadecimal(final String sNum) { + try { + Integer.parseInt(sNum, 16); + return true; + } catch (final NumberFormatException e) { + return false; + } + } + /** * Backport from Guava. */ From 7a9a0e6f513777dd5f3f1b8a39ae0bfcf74fe965 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sat, 24 Feb 2024 12:42:30 -0800 Subject: [PATCH 10/57] Fix /me from console (#5700) Fixes #5689 --- .../main/java/com/earth2me/essentials/commands/Commandme.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java index 46cd33d17..ce1e70835 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java @@ -17,8 +17,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import static com.earth2me.essentials.I18n.tlLiteral; - public class Commandme extends EssentialsCommand { public Commandme() { super("me"); @@ -109,7 +107,7 @@ public class Commandme extends EssentialsCommand { String message = getFinalArg(args, 0); message = FormatUtil.replaceFormat(message); - ess.getServer().broadcastMessage(tlLiteral("action", "@", message)); + ess.broadcastTl("action", "@", message); } @Override From 185b4e266b8ece312c3c8556e23af2eee8fcdeed Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sat, 24 Feb 2024 14:40:22 -0800 Subject: [PATCH 11/57] Fix /broadcastworld sending in all but the intended world (#5699) Fixes #5694 This issue was caused by the passed predicate being excludes rather than includes. Also addresses a separate issue where no help output was given when no arguments were specified and the command was sent by a player. --- .../earth2me/essentials/commands/Commandbroadcastworld.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 b9156cf8b..93c271dca 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java @@ -19,13 +19,13 @@ public class Commandbroadcastworld extends EssentialsCommand { @Override public 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(); } World world = user.getWorld(); String message = getFinalArg(args, 0); - if (args.length > 1 && ess.getSettings().isAllowWorldInBroadcastworld()) { + if (ess.getSettings().isAllowWorldInBroadcastworld()) { final World argWorld = ess.getWorld(args[0]); if (argWorld != null) { world = argWorld; @@ -53,7 +53,7 @@ public class Commandbroadcastworld extends EssentialsCommand { 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", message, AdventureUtil.parsed(AdventureUtil.legacyToMini(name))); } @Override From d4b72c8af6ac00b8a25cc2e80f26da0e56e1196a Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sun, 25 Feb 2024 00:06:52 -0800 Subject: [PATCH 12/57] Fix Discord /list command showing tags in output (#5698) --- .../java/com/earth2me/essentials/utils/FormatUtil.java | 7 +++++++ .../discord/interactions/commands/ListCommand.java | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java index 5cc901793..e911e3a8f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/FormatUtil.java @@ -40,6 +40,13 @@ public final class FormatUtil { return ChatColor.stripColor(input); } + public static String stripMiniFormat(final String input) { + if (input == null) { + return null; + } + return AdventureUtil.miniMessage().stripTags(input); + } + //This method is used to simply strip the & convention colour codes public static String stripEssentialsFormat(final String input) { if (input == null) { diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ListCommand.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ListCommand.java index 60057bc46..a34d52991 100644 --- a/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ListCommand.java +++ b/EssentialsDiscord/src/main/java/net/essentialsx/discord/interactions/commands/ListCommand.java @@ -3,6 +3,7 @@ package net.essentialsx.discord.interactions.commands; import com.earth2me.essentials.IEssentials; import com.earth2me.essentials.PlayerList; import com.earth2me.essentials.User; +import com.earth2me.essentials.utils.FormatUtil; import net.essentialsx.api.v2.services.discord.InteractionCommandArgument; import net.essentialsx.api.v2.services.discord.InteractionCommandArgumentType; import net.essentialsx.api.v2.services.discord.InteractionEvent; @@ -45,8 +46,8 @@ public class ListCommand extends InteractionCommandImpl { final StringBuilder stringBuilder = new StringBuilder(); for (final String str : output) { - stringBuilder.append(str).append("\n"); + stringBuilder.append(FormatUtil.stripMiniFormat(str)).append("\n"); } - event.reply(MessageUtil.sanitizeDiscordMarkdown(stringBuilder.substring(0, stringBuilder.length() - 2))); + event.reply(MessageUtil.sanitizeDiscordMarkdown(stringBuilder.substring(0, stringBuilder.length() - 1))); } } From 1b1b511b61eb122405711334de9abccbc4742039 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sun, 25 Feb 2024 17:39:18 -0800 Subject: [PATCH 13/57] Fix conversion issues between Legacy and MiniMessage (#5702) Fixes #5652 --- .../java/com/earth2me/essentials/I18n.java | 6 ++- .../essentials/utils/AdventureUtil.java | 46 +++++-------------- 2 files changed, 15 insertions(+), 37 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/I18n.java b/Essentials/src/main/java/com/earth2me/essentials/I18n.java index 9d7668651..b09cb6712 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/I18n.java +++ b/Essentials/src/main/java/com/earth2me/essentials/I18n.java @@ -182,8 +182,10 @@ public class I18n implements net.ess3.api.II18n { } final Object[] processedArgs = mutateArgs(objects, arg -> { - final String str = arg instanceof AdventureUtil.ParsedPlaceholder ? arg.toString() : AdventureUtil.miniMessage().escapeTags(arg.toString()); - return AdventureUtil.legacyToMini(str); + if (arg instanceof AdventureUtil.ParsedPlaceholder) { + return arg.toString(); + } + return AdventureUtil.legacyToMini(AdventureUtil.miniMessage().escapeTags(arg.toString())); }); return messageFormat.format(processedArgs).replace(' ', ' '); // replace nbsp with a space 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 4016504a5..18bf8aa8d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java @@ -8,18 +8,12 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; -import org.bukkit.ChatColor; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; public final class AdventureUtil { private static final LegacyComponentSerializer LEGACY_SERIALIZER; - private static final Pattern NAMED_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "[0-9a-fk-orA-FK-OR]"); - private static final Pattern HEX_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "x((?:" + ChatColor.COLOR_CHAR + "[0-9a-fA-F]){6})"); + private static final MiniMessage MINI_MESSAGE_NO_TAGS; private static final String LOOKUP = "0123456789abcdefklmnor"; - private static final String[] MINI_TAGS = new String[] {"black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow", "white", "obf", "b", "st", "u", "i", "reset"}; - private static final NamedTextColor[] COLORS = new NamedTextColor[] {NamedTextColor.BLACK, NamedTextColor.DARK_BLUE, NamedTextColor.DARK_GREEN, NamedTextColor.DARK_AQUA, NamedTextColor.DARK_RED, NamedTextColor.DARK_PURPLE, NamedTextColor.GOLD, NamedTextColor.GRAY, NamedTextColor.DARK_GRAY, NamedTextColor.BLUE, NamedTextColor.GREEN, NamedTextColor.AQUA, NamedTextColor.RED, NamedTextColor.LIGHT_PURPLE, NamedTextColor.YELLOW, NamedTextColor.WHITE}; + private static final NamedTextColor[] COLORS = new NamedTextColor[]{NamedTextColor.BLACK, NamedTextColor.DARK_BLUE, NamedTextColor.DARK_GREEN, NamedTextColor.DARK_AQUA, NamedTextColor.DARK_RED, NamedTextColor.DARK_PURPLE, NamedTextColor.GOLD, NamedTextColor.GRAY, NamedTextColor.DARK_GRAY, NamedTextColor.BLUE, NamedTextColor.GREEN, NamedTextColor.AQUA, NamedTextColor.RED, NamedTextColor.LIGHT_PURPLE, NamedTextColor.YELLOW, NamedTextColor.WHITE}; private static IEssentials ess; private static MiniMessage miniMessageInstance; @@ -29,6 +23,9 @@ public final class AdventureUtil { builder.hexColors(); } LEGACY_SERIALIZER = builder.build(); + + MINI_MESSAGE_NO_TAGS = MiniMessage.miniMessage(); + miniMessageInstance = createMiniMessageInstance(); } @@ -84,37 +81,16 @@ public final class AdventureUtil { /** * Converts a section sign legacy string to a MiniMessage string. + * * @param useCustomTags true if gold and red colors should use primary and secondary tags instead. */ public static String legacyToMini(String text, boolean useCustomTags) { - StringBuffer buffer = new StringBuffer(); - Matcher matcher = HEX_PATTERN.matcher(text); - while (matcher.find()) { - final String code = matcher.group(1).replace(String.valueOf(ChatColor.COLOR_CHAR), ""); - matcher.appendReplacement(buffer, "<#" + code + ">"); + final Component deserializedText = LEGACY_SERIALIZER.deserialize(text); + if (useCustomTags) { + return miniMessageInstance.serialize(deserializedText); + } else { + return MINI_MESSAGE_NO_TAGS.serialize(deserializedText); } - matcher.appendTail(buffer); - - matcher = NAMED_PATTERN.matcher(buffer.toString()); - buffer = new StringBuffer(); - while (matcher.find()) { - final int format = LOOKUP.indexOf(Character.toLowerCase(matcher.group().charAt(1))); - if (format != -1) { - String tagName = MINI_TAGS[format]; - if (useCustomTags) { - if (tagName.equals("gold")) { - tagName = "primary"; - } else if (tagName.equals("red")) { - tagName = "secondary"; - } - } - - matcher.appendReplacement(buffer, "<" + tagName + ">"); - } - } - matcher.appendTail(buffer); - - return buffer.toString(); } /** From 52a638f18fb830ec604af240388648e8472da687 Mon Sep 17 00:00:00 2001 From: MD <1917406+mdcfe@users.noreply.github.com> Date: Mon, 26 Feb 2024 01:51:31 +0000 Subject: [PATCH 14/57] Add actions step to log JUnit test reports (#5684) --- .github/workflows/build-master.yml | 6 ++++++ .github/workflows/build-pr.yml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/build-master.yml b/.github/workflows/build-master.yml index 62e0e96f4..1780c2731 100644 --- a/.github/workflows/build-master.yml +++ b/.github/workflows/build-master.yml @@ -34,6 +34,12 @@ jobs: chmod +x gradlew ./gradlew build --stacktrace + - name: Publish JUnit report + uses: mikepenz/action-junit-report@v4 + if: success() || failure() # Run even if the previous step fails + with: + report_paths: '**/build/test-results/test*/TEST-*.xml' + - name: Archive plugin jars on GitHub uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 5cb330dbb..ac9715fb1 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -36,6 +36,12 @@ jobs: chmod +x gradlew ./gradlew build --stacktrace + - name: Publish JUnit report + uses: mikepenz/action-junit-report@v4 + if: success() || failure() # Run even if the previous step fails + with: + report_paths: '**/build/test-results/test*/TEST-*.xml' + - name: Archive plugin jars on GitHub uses: actions/upload-artifact@v4 with: From bd8c792fa4cc1a508f8dc9b3c404cab9fed3ca47 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Mon, 26 Feb 2024 03:47:00 -0800 Subject: [PATCH 15/57] Support custom biomes in random teleport excluded biome list (#5703) --- .../com/earth2me/essentials/Essentials.java | 12 ++++++ .../com/earth2me/essentials/IEssentials.java | 3 ++ .../earth2me/essentials/RandomTeleport.java | 41 ++++++++++++++----- .../net/ess3/provider/BiomeKeyProvider.java | 8 ++++ providers/PaperProvider/build.gradle | 4 +- .../providers/PaperBiomeKeyProvider.java | 19 +++++++++ 6 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperBiomeKeyProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 3a54a58bc..81a4ab8f3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -59,6 +59,7 @@ import net.ess3.nms.refl.providers.ReflServerStateProvider; 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.BiomeKeyProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.DamageEventProvider; import net.ess3.provider.FormattedCommandAliasProvider; @@ -95,6 +96,7 @@ import net.ess3.provider.providers.ModernItemUnbreakableProvider; import net.ess3.provider.providers.ModernPersistentDataProvider; import net.ess3.provider.providers.ModernPlayerLocaleProvider; import net.ess3.provider.providers.ModernSignDataProvider; +import net.ess3.provider.providers.PaperBiomeKeyProvider; import net.ess3.provider.providers.PaperContainerProvider; import net.ess3.provider.providers.PaperKnownCommandsProvider; import net.ess3.provider.providers.PaperMaterialTagProvider; @@ -197,6 +199,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { private transient PlayerLocaleProvider playerLocaleProvider; private transient SignDataProvider signDataProvider; private transient DamageEventProvider damageEventProvider; + private transient BiomeKeyProvider biomeKeyProvider; private transient Kits kits; private transient RandomTeleport randomTeleport; private transient UpdateChecker updateChecker; @@ -485,6 +488,10 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { damageEventProvider = new LegacyDamageEventProvider(); } + if (PaperLib.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_19_4_R01)) { + biomeKeyProvider = new PaperBiomeKeyProvider(); + } + execTimer.mark("Init(Providers)"); reload(); @@ -1426,6 +1433,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { return damageEventProvider; } + @Override + public BiomeKeyProvider getBiomeKeyProvider() { + return biomeKeyProvider; + } + @Override public SignDataProvider getSignDataProvider() { return signDataProvider; diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 9aea053e8..3b41f1c30 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -9,6 +9,7 @@ import com.earth2me.essentials.perm.PermissionsHandler; import com.earth2me.essentials.updatecheck.UpdateChecker; import com.earth2me.essentials.userstorage.IUserMap; import net.ess3.nms.refl.providers.ReflOnlineModeProvider; +import net.ess3.provider.BiomeKeyProvider; import net.ess3.provider.ContainerProvider; import net.ess3.provider.DamageEventProvider; import net.ess3.provider.FormattedCommandAliasProvider; @@ -186,5 +187,7 @@ public interface IEssentials extends Plugin { DamageEventProvider getDamageEventProvider(); + BiomeKeyProvider getBiomeKeyProvider(); + PluginCommand getPluginCommand(String cmd); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index f020a2cca..b1b683ab6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -6,13 +6,12 @@ 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.World; -import org.bukkit.block.Biome; import java.io.File; import java.util.HashSet; -import java.util.List; import java.util.Queue; import java.util.Random; import java.util.Set; @@ -76,14 +75,10 @@ public class RandomTeleport implements IConf { config.save(); } - public Set getExcludedBiomes() { - final List biomeNames = config.getList("excluded-biomes", String.class); - final Set excludedBiomes = new HashSet<>(); - for (final String biomeName : biomeNames) { - try { - excludedBiomes.add(Biome.valueOf(biomeName.toUpperCase())); - } catch (final IllegalArgumentException ignored) { - } + public Set getExcludedBiomes() { + final Set excludedBiomes = new HashSet<>(); + for (final String key : config.getList("excluded-biomes", String.class)) { + excludedBiomes.add(key.toLowerCase()); } return excludedBiomes; } @@ -204,7 +199,31 @@ public class RandomTeleport implements IConf { } private boolean isValidRandomLocation(final Location location) { - return location.getBlockY() > ess.getWorldInfoProvider().getMinHeight(location.getWorld()) && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); + return location.getBlockY() > ess.getWorldInfoProvider().getMinHeight(location.getWorld()) && !isExcludedBiome(location); + } + + // Exclude biome if enum or namespaced key matches + private boolean isExcludedBiome(final Location location) { + final Set excluded = getExcludedBiomes(); + final String enumKey = location.getBlock().getBiome().name().toLowerCase(); + // Try with good old bukkit enum + if (excluded.contains(enumKey)) { + return true; + } + if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_14_4_R01)) { + // No way to get the biome key on versions below this + return false; + } + final String biomeKey; + final BiomeKeyProvider biomeKeyProvider = ess.getBiomeKeyProvider(); + if (biomeKeyProvider != null) { + // Works with custom biome keys + biomeKey = biomeKeyProvider.getBiomeKey(location.getBlock()).toString(); + } else { + // Custom biome keys resolve as "minecraft:custom" which is unfortunate + biomeKey = location.getBlock().getBiome().getKey().toString(); + } + return excluded.contains(biomeKey); } public File getFile() { diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java new file mode 100644 index 000000000..94ee756fc --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/BiomeKeyProvider.java @@ -0,0 +1,8 @@ +package net.ess3.provider; + +import org.bukkit.NamespacedKey; +import org.bukkit.block.Block; + +public interface BiomeKeyProvider extends Provider { + NamespacedKey getBiomeKey(Block block); +} diff --git a/providers/PaperProvider/build.gradle b/providers/PaperProvider/build.gradle index ecff3ba47..b66ffd77c 100644 --- a/providers/PaperProvider/build.gradle +++ b/providers/PaperProvider/build.gradle @@ -11,8 +11,8 @@ dependencies { implementation(project(':providers:BaseProviders')) { exclude(module: 'spigot-api') } - compileOnly 'io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT' - compileOnly 'io.papermc.paper:paper-mojangapi:1.18.2-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT' + compileOnly 'io.papermc.paper:paper-mojangapi:1.20.4-R0.1-SNAPSHOT' } essentials { diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperBiomeKeyProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperBiomeKeyProvider.java new file mode 100644 index 000000000..34c26ea48 --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperBiomeKeyProvider.java @@ -0,0 +1,19 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.BiomeKeyProvider; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.block.Block; + +@SuppressWarnings("deprecation") +public class PaperBiomeKeyProvider implements BiomeKeyProvider { + @Override + public NamespacedKey getBiomeKey(final Block block) { + return Bukkit.getUnsafe().getBiomeKey(block.getWorld(), block.getX(), block.getY(), block.getZ()); + } + + @Override + public String getDescription() { + return "Paper Biome Key Provider"; + } +} From 421945070545843e031d36f78d575e4747a11513 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Mon, 26 Feb 2024 05:09:02 -0800 Subject: [PATCH 16/57] Hotfix legacy serializer to include capitalized formatting code chars (#5711) --- .../essentials/utils/AdventureUtil.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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 18bf8aa8d..e3d361803 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java @@ -4,10 +4,17 @@ import net.ess3.api.IEssentials; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.flattener.ComponentFlattener; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; +import net.kyori.adventure.text.serializer.legacy.CharacterAndFormat; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.Reset; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public final class AdventureUtil { private static final LegacyComponentSerializer LEGACY_SERIALIZER; @@ -18,7 +25,26 @@ public final class AdventureUtil { private static MiniMessage miniMessageInstance; static { - final LegacyComponentSerializer.Builder builder = LegacyComponentSerializer.builder().flattener(ComponentFlattener.basic()).useUnusualXRepeatedCharacterHexFormat(); + final List formats = new ArrayList<>(); + formats.addAll(CharacterAndFormat.defaults()); + formats.addAll(Arrays.asList( + CharacterAndFormat.characterAndFormat('A', NamedTextColor.GREEN), + CharacterAndFormat.characterAndFormat('B', NamedTextColor.AQUA), + CharacterAndFormat.characterAndFormat('C', NamedTextColor.RED), + CharacterAndFormat.characterAndFormat('D', NamedTextColor.LIGHT_PURPLE), + CharacterAndFormat.characterAndFormat('E', NamedTextColor.YELLOW), + CharacterAndFormat.characterAndFormat('F', NamedTextColor.WHITE), + CharacterAndFormat.characterAndFormat('K', TextDecoration.OBFUSCATED), + CharacterAndFormat.characterAndFormat('L', TextDecoration.BOLD), + CharacterAndFormat.characterAndFormat('M', TextDecoration.STRIKETHROUGH), + CharacterAndFormat.characterAndFormat('N', TextDecoration.UNDERLINED), + CharacterAndFormat.characterAndFormat('O', TextDecoration.ITALIC), + CharacterAndFormat.characterAndFormat('R', Reset.INSTANCE) + )); + final LegacyComponentSerializer.Builder builder = LegacyComponentSerializer.builder() + .flattener(ComponentFlattener.basic()) + .formats(formats) + .useUnusualXRepeatedCharacterHexFormat(); if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_16_1_R01)) { builder.hexColors(); } From 6b521e78a6d47c7481a7bd5eadc9a7454953f9b9 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Mon, 26 Feb 2024 11:32:44 -0800 Subject: [PATCH 17/57] Fix jail-online-time with offline players (#5701) --- .../java/com/earth2me/essentials/PlayerExtension.java | 8 ++++++++ .../earth2me/essentials/commands/Commandtogglejail.java | 4 ++-- .../java/com/earth2me/essentials/OfflinePlayerStub.java | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/PlayerExtension.java b/Essentials/src/main/java/com/earth2me/essentials/PlayerExtension.java index 23bbb5a3a..09c3d0191 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/PlayerExtension.java +++ b/Essentials/src/main/java/com/earth2me/essentials/PlayerExtension.java @@ -1,6 +1,7 @@ package com.earth2me.essentials; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.entity.Player; @@ -31,4 +32,11 @@ public class PlayerExtension { public Location getLocation() { return base.getLocation(); } + + public OfflinePlayer getOffline() { + if (base instanceof OfflinePlayerStub) { + return ((OfflinePlayerStub) base).base; + } + return base; + } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java index 1cab26deb..ce777f67f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtogglejail.java @@ -83,7 +83,7 @@ public class Commandtogglejail extends EssentialsCommand { if (args.length > 2) { player.setJailTimeout(timeDiff); // 50 MSPT (milliseconds per tick) - player.setOnlineJailedTime(ess.getSettings().isJailOnlineTime() ? ((player.getBase().getStatistic(PLAY_ONE_TICK)) + (timeDiff / 50)) : 0); + player.setOnlineJailedTime(ess.getSettings().isJailOnlineTime() ? ((player.getOffline().getStatistic(PLAY_ONE_TICK)) + (timeDiff / 50)) : 0); } final String tlKey; @@ -121,7 +121,7 @@ public class Commandtogglejail extends EssentialsCommand { final long displayTimeDiff = DateUtil.parseDateDiff(unparsedTime, true); final long timeDiff = DateUtil.parseDateDiff(unparsedTime, true, ess.getSettings().isJailOnlineTime()); player.setJailTimeout(timeDiff); - player.setOnlineJailedTime(ess.getSettings().isJailOnlineTime() ? ((player.getBase().getStatistic(PLAY_ONE_TICK)) + (timeDiff / 50)) : 0); + player.setOnlineJailedTime(ess.getSettings().isJailOnlineTime() ? ((player.getOffline().getStatistic(PLAY_ONE_TICK)) + (timeDiff / 50)) : 0); sender.sendTl("jailSentenceExtended", DateUtil.formatDateDiff(displayTimeDiff)); final String tlKey = "jailNotifySentenceExtended"; diff --git a/providers/1_12Provider/src/main/java/com/earth2me/essentials/OfflinePlayerStub.java b/providers/1_12Provider/src/main/java/com/earth2me/essentials/OfflinePlayerStub.java index 77f778682..a73f6ff15 100644 --- a/providers/1_12Provider/src/main/java/com/earth2me/essentials/OfflinePlayerStub.java +++ b/providers/1_12Provider/src/main/java/com/earth2me/essentials/OfflinePlayerStub.java @@ -64,8 +64,8 @@ import java.util.Set; import java.util.UUID; public class OfflinePlayerStub implements Player { + protected final transient org.bukkit.OfflinePlayer base; private final transient Server server; - private final transient org.bukkit.OfflinePlayer base; private transient Location location = new Location(null, 0, 0, 0, 0, 0); private transient World world; private boolean allowFlight = false; From 622c8147a9240b7d635d12496c856daa26386f56 Mon Sep 17 00:00:00 2001 From: Bobcat00 Date: Mon, 26 Feb 2024 15:25:30 -0500 Subject: [PATCH 18/57] Add setting to use usernames over display names for social spy (#5613) Co-authored-by: Bobcat00 Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../com/earth2me/essentials/EssentialsPlayerListener.java | 3 ++- .../src/main/java/com/earth2me/essentials/ISettings.java | 2 ++ .../src/main/java/com/earth2me/essentials/Settings.java | 5 +++++ .../essentials/messaging/SimpleMessageRecipient.java | 6 ++++-- Essentials/src/main/resources/config.yml | 4 ++++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index a7bca0435..af1b64ea3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -640,12 +640,13 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { || (!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()))); } } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 8096f08d4..e725f8fa9 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 diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 5fe884f7a..bd8d64b4f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -456,6 +456,11 @@ public class Settings implements net.ess3.api.ISettings { 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")) { 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 d52eeb294..6c7364108 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 class SimpleMessageRecipient implements IMessageRecipient { // 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/resources/config.yml b/Essentials/src/main/resources/config.yml index 201e5c15b..e477f037b 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. From 993d7ede5664e57a672c6dd7b7062ef31cadafdb Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Thu, 29 Feb 2024 18:32:51 -0500 Subject: [PATCH 19/57] Fix shout/local chat not sending with certain formats (#5719) --- .../essentials/chat/processing/AbstractChatHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f593840d7..06986d626 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 @@ public abstract class AbstractChatHandler { // 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()); } From a4ac720057ac13462c50abb50c92c9ffefa49a5f Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:45:06 -0500 Subject: [PATCH 20/57] Fix format parsing in ban messages (#5722) --- .../com/earth2me/essentials/EssentialsPlayerListener.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index af1b64ea3..02be19c1a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -545,14 +545,14 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { 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()))); } } } From c19b20ea3b80066fd1252f5bca8162dc1f7a6ae5 Mon Sep 17 00:00:00 2001 From: Catarina Freire <106635593+cati-xf@users.noreply.github.com> Date: Mon, 4 Mar 2024 18:49:30 +0000 Subject: [PATCH 21/57] Fix banner patterns not working in kits (#5723) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../main/java/com/earth2me/essentials/MetaItemStack.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 14be12c1f..136209887 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -633,7 +633,7 @@ public class MetaItemStack { PatternType patternType = null; try { - patternType = PatternType.valueOf(split[0]); + patternType = PatternType.getByIdentifier(split[0]); } catch (final Exception ignored) { } @@ -642,7 +642,7 @@ public class MetaItemStack { final Color color = Color.fromRGB(Integer.parseInt(split[1])); meta.setBaseColor(DyeColor.getByColor(color)); } else if (patternType != null) { - final PatternType type = PatternType.valueOf(split[0]); + 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 +658,7 @@ public class MetaItemStack { PatternType patternType = null; try { - patternType = PatternType.valueOf(split[0]); + patternType = PatternType.getByIdentifier(split[0]); } catch (final Exception ignored) { } @@ -669,7 +669,7 @@ public class MetaItemStack { 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]); + 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); From 3817a11d9d8ba407fc407f8dc8b113f4601c13ba Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Tue, 5 Mar 2024 14:58:57 -0500 Subject: [PATCH 22/57] Convert color codes in tempban and tempbanip (#5726) --- .../java/com/earth2me/essentials/commands/Commandtempban.java | 3 ++- .../com/earth2me/essentials/commands/Commandtempbanip.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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 7c785a835..fde30d244 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.IUser; 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 class Commandtempban extends EssentialsCommand { } 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 4b0865740..e3105dfa9 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 class Commandtempbanip extends EssentialsCommand { 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")) { From 570eca2e2109c61d76446aeff16ec9cdcead1369 Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Mon, 11 Mar 2024 00:31:40 -0400 Subject: [PATCH 23/57] Add text box to bug report template (#5715) --- .github/ISSUE_TEMPLATE/report-a-bug.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/report-a-bug.yml b/.github/ISSUE_TEMPLATE/report-a-bug.yml index 7c385ca3f..44f51eac3 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 + From 2cb0af0ca4fa0fea38283612fcf4df9fb9f8b4db Mon Sep 17 00:00:00 2001 From: pop4959 Date: Mon, 11 Mar 2024 01:14:58 -0700 Subject: [PATCH 24/57] Strict parsing for legacy converted placeholders (#5740) This fixes issues where arguments converted implicitly from MiniMessage are prone to bleeding into the rest of the output. The fix mostly works since `MINI_MESSAGE_NO_TAGS` is only used for legacy conversion, while `miniMessageInstance` is used in all other cases normally. If that were not the case, we would not want strict parsing everywhere since we don't enforce this in translations anyway. Fixes #5729 Fixes #5730 Fixes #5732 Fixes #5735 Fixes #5720 Closes #5728 --- .../main/java/com/earth2me/essentials/utils/AdventureUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e3d361803..e32d4d218 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(); } From 8cfe680abc79a67af4e3917810c78946740c1937 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Mon, 25 Mar 2024 12:09:13 -0700 Subject: [PATCH 25/57] Fix empty translations being sent to Console (#5737) --- .../src/main/java/com/earth2me/essentials/CommandSource.java | 4 +++- Essentials/src/main/java/com/earth2me/essentials/Console.java | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/CommandSource.java b/Essentials/src/main/java/com/earth2me/essentials/CommandSource.java index 59a88a21b..ed8d5bdb6 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 class CommandSource { } 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 9dacde649..6414f3cef 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 final class Console implements IMessageRecipient { @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() From 76a513a05c1693648a4328fcdefcc00134989207 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Mon, 25 Mar 2024 12:11:18 -0700 Subject: [PATCH 26/57] Don't run keyword replacer by default in translated broadcasts (#5739) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../src/main/java/com/earth2me/essentials/Essentials.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 81a4ab8f3..a095ba8aa 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -1200,7 +1200,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { @Override public void broadcastTl(final String tlKey, final Object... args) { - broadcastTl(null, null, true, tlKey, args); + broadcastTl(null, null, false, tlKey, args); } @Override From 71ca7ffbf6c36c9fd18cf61056295dca4a733f62 Mon Sep 17 00:00:00 2001 From: DarkLaw <44745161+ImDarkLaw@users.noreply.github.com> Date: Mon, 1 Apr 2024 01:53:53 +0300 Subject: [PATCH 27/57] Fix heal signs not healing up to the player's max health (#5752) --- .../src/main/java/com/earth2me/essentials/signs/SignHeal.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f5eadaf2a..4f2856dad 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 @@ public class SignHeal extends EssentialsSign { 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"); From c85e179718944d3482a223c6f459b7149cab9b83 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sun, 7 Apr 2024 18:22:31 -0700 Subject: [PATCH 28/57] Make ChargeException translatable (#5736) Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com> --- .../com/earth2me/essentials/ChargeException.java | 10 ++++------ .../main/java/com/earth2me/essentials/Trade.java | 16 ++++++++-------- .../main/java/com/earth2me/essentials/User.java | 2 +- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ChargeException.java b/Essentials/src/main/java/com/earth2me/essentials/ChargeException.java index adba3669d..a8bde32ec 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/Trade.java b/Essentials/src/main/java/com/earth2me/essentials/Trade.java index c1add6d94..8cfebc433 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 class Trade { } 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 class Trade { 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 class Trade { 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 class Trade { 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 class Trade { } 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 16cabcf3f..c928cba85 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 class User extends UserData implements Comparable, IMessageRecipien 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)); } } From c60ed56190ef9992cc9d574157b4e52eed3ccaff Mon Sep 17 00:00:00 2001 From: Emilia Kond Date: Sun, 14 Apr 2024 00:50:45 +0300 Subject: [PATCH 29/57] Fix stack trace when buying from sign when inventory full (#5761) --- .../src/main/java/com/earth2me/essentials/signs/SignBuy.java | 2 +- .../src/main/java/com/earth2me/essentials/signs/SignTrade.java | 2 +- Essentials/src/main/resources/messages.properties | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) 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 76ca2045b..8b59f79f6 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 @@ public class SignBuy extends EssentialsSign { 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/SignTrade.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignTrade.java index 39199faea..f773eb294 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 @@ public class SignTrade extends EssentialsSign { 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/resources/messages.properties b/Essentials/src/main/resources/messages.properties index 3c448af41..c1d1bf843 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -561,6 +561,7 @@ inventoryClearingAllArmor=Cleared all inventory items and armor fromCleared all inventory items from {0}. inventoryClearingFromAll=Clearing the inventory of all users... inventoryClearingStack=Removed {0} of {1} from {2}. +inventoryFull=Your inventory is full. invseeCommandDescription=See the inventory of other players. invseeCommandUsage=/ invseeCommandUsage1=/ From 6a2527ccdbc1d7f08f32770e02f82b79c7e78720 Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Sun, 28 Apr 2024 04:39:26 -0400 Subject: [PATCH 30/57] Fix sender not receiving helpop message (#5769) --- .../java/com/earth2me/essentials/commands/Commandhelpop.java | 2 ++ 1 file changed, 2 insertions(+) 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 28d5870dd..c0a819d83 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,8 @@ public class Commandhelpop extends EssentialsCommand { final HelpopMessageSendEvent sendEvent = new HelpopMessageSendEvent(from, recipients, message); ess.getServer().getPluginManager().callEvent(sendEvent); + from.sendTl("helpOp", from.getDisplayName(), message); + for (IUser recipient : sendEvent.getRecipients()) { recipient.sendTl("helpOp", from.getDisplayName(), message); } From 549283a1e51708a5a19c36c1f3ec9dae32b1abc8 Mon Sep 17 00:00:00 2001 From: DarkLaw <44745161+ImDarkLaw@users.noreply.github.com> Date: Sun, 28 Apr 2024 11:44:21 +0300 Subject: [PATCH 31/57] Translate Gamemode placeholder in cantGamemode message (#5771) --- .../java/com/earth2me/essentials/commands/Commandgamemode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 52a2a2215..b5c6d05d7 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 @@ public class Commandgamemode extends EssentialsLoopCommand { } if (isProhibitedChange(user, gameMode)) { - user.sendTl("cantGamemode", gameMode.name()); + user.sendTl("cantGamemode", user.playerTl(gameMode.toString().toLowerCase(Locale.ENGLISH))); return; } From cde7184da39f623e58e305b7d00e4be5f8ac7ddb Mon Sep 17 00:00:00 2001 From: Charles DeLancey <46200123+Evidentsinger14@users.noreply.github.com> Date: Mon, 29 Apr 2024 21:26:49 -0400 Subject: [PATCH 32/57] Fix duplicated messages with /helpop (#5776) --- .../java/com/earth2me/essentials/commands/Commandhelpop.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 c0a819d83..690348a98 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelpop.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandhelpop.java @@ -51,7 +51,10 @@ public class Commandhelpop extends EssentialsCommand { final HelpopMessageSendEvent sendEvent = new HelpopMessageSendEvent(from, recipients, message); ess.getServer().getPluginManager().callEvent(sendEvent); - from.sendTl("helpOp", from.getDisplayName(), message); + 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); From c58aae78e7b818a4c029c7c153bd1f335ed9b6bf Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 25 Apr 2024 15:04:43 -0400 Subject: [PATCH 33/57] Update to Minecraft 1.20.6 --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 3 ++- README.md | 2 +- build-logic/src/main/kotlin/constants.kt | 2 +- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) 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 b3788d835..9eb937fb4 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,9 @@ 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"); - 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); public static final boolean PRE_FLATTENING = VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01); diff --git a/README.md b/README.md index 6aef88946..76db8f564 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, and 1.20.6.** * **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/src/main/kotlin/constants.kt b/build-logic/src/main/kotlin/constants.kt index f1398887f..60793a152 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.20.6" 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 0a497fed8..67ff513f2 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.20.6-R0.1-SNAPSHOT" val junit5Version = "5.10.2" val mockitoVersion = "3.12.4" From 1c8060341f4b3069c9c82340bdfaa77be3c69991 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Mon, 29 Apr 2024 18:32:34 -0700 Subject: [PATCH 34/57] Opt-out of remapping on Paper 1.20.5+ (#5782) --- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 3 +++ 1 file changed, 3 insertions(+) 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 67ff513f2..f337b6fb0 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -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") } From 84d3138b217f2985666a3b1173d64d79a14073cf Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 12 May 2024 17:26:35 -0400 Subject: [PATCH 35/57] Fix tests We really need to improve our tests, this will work for now --- .../java/com/earth2me/essentials/Essentials.java | 2 ++ .../com/earth2me/essentials/utils/LocationUtil.java | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index a095ba8aa..d1bf8a823 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -158,6 +158,7 @@ import static com.earth2me.essentials.I18n.tlLocale; 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<>(); @@ -226,6 +227,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { } 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()) { 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 ecbfafe91..ab3a8980f 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); + } } } From b9b3e4430e30924b0d6a1cfa308ebb147156b087 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 13 May 2024 16:55:04 -0400 Subject: [PATCH 36/57] Reflect Banner API Changes --- .../com/earth2me/essentials/Essentials.java | 16 ++++++ .../com/earth2me/essentials/IEssentials.java | 3 ++ .../earth2me/essentials/MetaItemStack.java | 2 +- .../essentials/items/AbstractItemDb.java | 4 +- providers/1_12Provider/build.gradle | 3 ++ .../providers/LegacyBannerDataProvider.java | 26 ++++++++++ .../net/ess3/provider/BannerDataProvider.java | 10 ++++ .../providers/BaseBannerDataProvider.java | 49 +++++++++++++++++++ 8 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyBannerDataProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/BannerDataProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseBannerDataProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index d1bf8a823..27785f9b4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -59,6 +59,7 @@ import net.ess3.nms.refl.providers.ReflServerStateProvider; 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; @@ -78,6 +79,7 @@ import net.ess3.provider.SpawnerBlockProvider; 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.BaseLoggerProvider; import net.ess3.provider.providers.BasePotionDataProvider; import net.ess3.provider.providers.BlockMetaSpawnerItemProvider; @@ -85,6 +87,7 @@ 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.LegacyItemUnbreakableProvider; import net.ess3.provider.providers.LegacyPlayerLocaleProvider; @@ -185,6 +188,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; @@ -411,6 +415,13 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { potionMetaProvider = new BasePotionDataProvider(); } + //Banner Meta Provider + if (VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_20_6_R01)) { + bannerDataProvider = new BaseBannerDataProvider(); + } else { + bannerDataProvider = new LegacyBannerDataProvider(); + } + //Server State Provider //Container Provider if (PaperLib.isPaper() && VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_15_2_R01)) { @@ -1366,6 +1377,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { return potionMetaProvider; } + @Override + public BannerDataProvider getBannerDataProvider() { + return bannerDataProvider; + } + @Override public CustomItemResolver getCustomItemResolver() { return customItemResolver; diff --git a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 3b41f1c30..5fbb1bf87 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -9,6 +9,7 @@ import com.earth2me.essentials.perm.PermissionsHandler; 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; @@ -189,5 +190,7 @@ public interface IEssentials extends Plugin { BiomeKeyProvider getBiomeKeyProvider(); + BannerDataProvider getBannerDataProvider(); + PluginCommand getPluginCommand(String cmd); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 136209887..73a97ef29 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -640,7 +640,7 @@ public class MetaItemStack { 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.getByIdentifier(split[0]); final DyeColor color = DyeColor.getByColor(Color.fromRGB(Integer.parseInt(split[1]))); 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 19178c904..bfefb4e8e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java @@ -317,6 +317,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb { 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 +325,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb { } 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 +336,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb { 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/providers/1_12Provider/build.gradle b/providers/1_12Provider/build.gradle index e04aa5426..438afeea5 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 000000000..afd971ffd --- /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/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 000000000..eedf2e5f2 --- /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/providers/BaseBannerDataProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseBannerDataProvider.java new file mode 100644 index 000000000..4fbfb24a7 --- /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."; + } +} From 4c5a97bf009725b89984b7542a09362823dd928e Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 13 May 2024 16:55:10 -0400 Subject: [PATCH 37/57] Reflect Potion API Changes --- .../com/earth2me/essentials/Essentials.java | 11 +- .../earth2me/essentials/MetaItemStack.java | 17 +-- .../java/com/earth2me/essentials/Potions.java | 85 ++++++----- .../essentials/items/AbstractItemDb.java | 14 +- .../earth2me/essentials/items/FlatItemDb.java | 78 ++++++++-- .../providers/LegacyPotionMetaProvider.java | 134 ++++++++++++++++++ .../PrehistoricPotionMetaProvider.java | 85 +++++++++++ .../net/ess3/provider/PotionMetaProvider.java | 18 +++ .../providers/BasePotionDataProvider.java | 71 ---------- .../providers/LegacyPotionMetaProvider.java | 20 --- .../providers/ModernPotionMetaProvider.java | 107 ++++++++++++++ 11 files changed, 473 insertions(+), 167 deletions(-) create mode 100644 providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java create mode 100644 providers/1_8Provider/src/main/java/net/ess3/provider/providers/PrehistoricPotionMetaProvider.java delete mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/BasePotionDataProvider.java delete mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/LegacyPotionMetaProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/ModernPotionMetaProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 27785f9b4..778855e0c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -81,7 +81,6 @@ import net.ess3.provider.SyncCommandsProvider; import net.ess3.provider.WorldInfoProvider; import net.ess3.provider.providers.BaseBannerDataProvider; 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; @@ -98,6 +97,7 @@ import net.ess3.provider.providers.ModernDataWorldInfoProvider; 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; @@ -106,6 +106,7 @@ import net.ess3.provider.providers.PaperMaterialTagProvider; 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; @@ -409,10 +410,12 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { } //Potion Meta Provider - if (VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_9_R01)) { - potionMetaProvider = new LegacyPotionMetaProvider(); + 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 BasePotionDataProvider(); + potionMetaProvider = new LegacyPotionMetaProvider(); } //Banner Meta Provider diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 73a97ef29..989e6fb76 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.ItemMeta; 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; @@ -541,17 +540,7 @@ public class MetaItemStack { } 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(); } } @@ -633,6 +622,7 @@ public class MetaItemStack { PatternType patternType = null; try { + //noinspection removal patternType = PatternType.getByIdentifier(split[0]); } catch (final Exception ignored) { } @@ -642,6 +632,7 @@ public class MetaItemStack { final Color color = Color.fromRGB(Integer.parseInt(split[1])); ess.getBannerDataProvider().setBaseColor(stack, DyeColor.getByColor(color)); } else if (patternType != null) { + //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); @@ -658,6 +649,7 @@ public class MetaItemStack { PatternType patternType = null; try { + //noinspection removal patternType = PatternType.getByIdentifier(split[0]); } catch (final Exception ignored) { } @@ -669,6 +661,7 @@ public class MetaItemStack { final Color color = Color.fromRGB(Integer.parseInt(split[1])); banner.setBaseColor(DyeColor.getByColor(color)); } else if (patternType != null) { + //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); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Potions.java b/Essentials/src/main/java/com/earth2me/essentials/Potions.java index b174a03c1..21eb45ff4 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); 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 bfefb4e8e..9b9b72656 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java +++ b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java @@ -24,10 +24,8 @@ import org.bukkit.inventory.meta.FireworkEffectMeta; 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; @@ -285,16 +283,8 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb { 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. 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 bcb4a9bea..af2e2f910 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.JsonObject; 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.HashMap; 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 class FlatItemDb extends AbstractItemDb { 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 class FlatItemDb extends AbstractItemDb { 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 class FlatItemDb extends AbstractItemDb { 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 class FlatItemDb extends AbstractItemDb { return material; } - public PotionData getPotionData() { + public EssentialPotionData getPotionData() { return this.potionData; } @@ -294,5 +296,51 @@ public class FlatItemDb extends AbstractItemDb { 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/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 000000000..d28fe6213 --- /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 000000000..05dc7ce60 --- /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/PotionMetaProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/PotionMetaProvider.java index 637a470a5..f2f35ba9f 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 @@ package net.ess3.provider; 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/BasePotionDataProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BasePotionDataProvider.java deleted file mode 100644 index 74b4592a5..000000000 --- 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 2ab157895..000000000 --- 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 000000000..02ad54cdb --- /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"; + } +} From bef1e57712279d15a19882e2aa13e40c66dd81b9 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 13 May 2024 16:39:57 -0400 Subject: [PATCH 38/57] Reflect Enchantment API Changes --- .../com/earth2me/essentials/Enchantments.java | 234 ++++++++++-------- .../essentials/utils/RegistryUtil.java | 32 +++ 2 files changed, 165 insertions(+), 101 deletions(-) create mode 100644 Essentials/src/main/java/com/earth2me/essentials/utils/RegistryUtil.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java index 542dca311..c75fc6aa3 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); + 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", 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("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", Enchantment.DAMAGE_UNDEAD); - ENCHANTMENTS.put("smite", Enchantment.DAMAGE_UNDEAD); - ALIASENCHANTMENTS.put("du", Enchantment.DAMAGE_UNDEAD); + 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", 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("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", Enchantment.DURABILITY); - ALIASENCHANTMENTS.put("dura", Enchantment.DURABILITY); - ENCHANTMENTS.put("unbreaking", Enchantment.DURABILITY); - ALIASENCHANTMENTS.put("d", Enchantment.DURABILITY); + 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); + + final Enchantment FORTUNE = RegistryUtil.valueOf(Enchantment.class, "LOOT_BONUS_BLOCKS", "FORTUNE"); - 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("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", 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("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", Enchantment.OXYGEN); - ENCHANTMENTS.put("respiration", Enchantment.OXYGEN); - ALIASENCHANTMENTS.put("breathing", Enchantment.OXYGEN); - ENCHANTMENTS.put("breath", Enchantment.OXYGEN); - ALIASENCHANTMENTS.put("o", Enchantment.OXYGEN); + 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", Enchantment.PROTECTION_ENVIRONMENTAL); - ALIASENCHANTMENTS.put("prot", Enchantment.PROTECTION_ENVIRONMENTAL); - ENCHANTMENTS.put("protect", Enchantment.PROTECTION_ENVIRONMENTAL); - ALIASENCHANTMENTS.put("p", Enchantment.PROTECTION_ENVIRONMENTAL); + 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", 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("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", 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("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", 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); + 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", Enchantment.PROTECTION_PROJECTILE); - ENCHANTMENTS.put("projprot", Enchantment.PROTECTION_PROJECTILE); - ALIASENCHANTMENTS.put("pp", Enchantment.PROTECTION_PROJECTILE); + 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); + + final Enchantment AQUA_AFFINITY = RegistryUtil.valueOf(Enchantment.class, "WATER_WORKER", "AQUA_AFFINITY"); - ENCHANTMENTS.put("waterworker", Enchantment.WATER_WORKER); - ENCHANTMENTS.put("aquaaffinity", Enchantment.WATER_WORKER); - ALIASENCHANTMENTS.put("watermine", Enchantment.WATER_WORKER); - ALIASENCHANTMENTS.put("ww", Enchantment.WATER_WORKER); + 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", Enchantment.ARROW_FIRE); - ENCHANTMENTS.put("flame", Enchantment.ARROW_FIRE); - ENCHANTMENTS.put("flamearrow", Enchantment.ARROW_FIRE); - ALIASENCHANTMENTS.put("af", Enchantment.ARROW_FIRE); + 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", Enchantment.ARROW_DAMAGE); - ENCHANTMENTS.put("power", Enchantment.ARROW_DAMAGE); - ALIASENCHANTMENTS.put("arrowpower", Enchantment.ARROW_DAMAGE); - ALIASENCHANTMENTS.put("ad", Enchantment.ARROW_DAMAGE); + 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", 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); + 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", 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); + 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", Enchantment.LUCK); - ALIASENCHANTMENTS.put("luckofsea", Enchantment.LUCK); - ALIASENCHANTMENTS.put("luckofseas", Enchantment.LUCK); - ALIASENCHANTMENTS.put("rodluck", Enchantment.LUCK); + 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 { 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 000000000..dcf35dd0a --- /dev/null +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/RegistryUtil.java @@ -0,0 +1,32 @@ +package com.earth2me.essentials.utils; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; + +public final class RegistryUtil { + private static final Table, String, Object> registryCache = HashBasedTable.create(); + + private RegistryUtil() { + } + + 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; + } +} From d4a3f5a9e6ef9c66f8b936c8f1d5155fb16905d0 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 13 May 2024 16:55:54 -0400 Subject: [PATCH 39/57] Add support for 1.20.6 Mobs --- .../java/com/earth2me/essentials/Mob.java | 17 +++++++------- .../com/earth2me/essentials/MobCompat.java | 23 +++++++++++++++++++ .../java/com/earth2me/essentials/MobData.java | 16 +++++++++++-- .../essentials/commands/Commandfirework.java | 4 ++-- 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Mob.java b/Essentials/src/main/java/com/earth2me/essentials/Mob.java index 249746c0f..735b18a99 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Mob.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Mob.java @@ -42,9 +42,9 @@ 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), @@ -52,12 +52,12 @@ public enum Mob { WITCH("Witch", Enemies.ENEMY, EntityType.WITCH), BOAT("Boat", Enemies.NEUTRAL, EntityType.BOAT), 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 +112,7 @@ 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"), ; 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 e4992f547..092e8d775 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; @@ -20,6 +21,7 @@ import org.bukkit.entity.Parrot; import org.bukkit.entity.Player; 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; @@ -50,6 +52,15 @@ public final class MobCompat { // 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"); private MobCompat() { } @@ -213,6 +224,18 @@ public final class MobCompat { } } + 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 enum CatType { // These are (loosely) Mojang names for the cats SIAMESE("SIAMESE", "SIAMESE_CAT"), diff --git a/Essentials/src/main/java/com/earth2me/essentials/MobData.java b/Essentials/src/main/java/com/earth2me/essentials/MobData.java index 581713d82..90c8e42c5 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,15 @@ 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), ; final private String nickname; @@ -424,6 +433,9 @@ public enum MobData { case "frog": MobCompat.setFrogVariant(spawned, split[1]); break; + case "wolf": + MobCompat.setWolfVariant(spawned, split[1]); + break; } } else { Essentials.getWrappedLogger().warning("Unknown mob data type: " + this.toString()); 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 53238793a..0caddc7c2 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 net.ess3.api.TranslatableException; 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 @@ public class Commandfirework extends EssentialsCommand { } } 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); From 5392169f72ca8a471329697fe846b99405f50537 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Wed, 8 May 2024 18:34:27 -0400 Subject: [PATCH 40/57] Update items.json for 1.20.6 --- Essentials/src/main/resources/items.json | 422 +++++++++++++---------- 1 file changed, 241 insertions(+), 181 deletions(-) diff --git a/Essentials/src/main/resources/items.json b/Essentials/src/main/resources/items.json index c8f74341c..ef9363e4b 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" }, @@ -6325,67 +6335,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" }, @@ -7156,6 +7105,11 @@ }, "flintandsteel": "flint_and_steel", "minecraft:flint_and_steel": "flint_and_steel", + "flow_banner_pattern": { + "material": "FLOW_BANNER_PATTERN" + }, + "flowbannerpattern": "flow_banner_pattern", + "minecraft:flow_banner_pattern": "flow_banner_pattern", "flower_banner_pattern": { "material": "FLOWER_BANNER_PATTERN" }, @@ -8530,6 +8484,11 @@ "material": "GUNPOWDER" }, "minecraft:gunpowder": "gunpowder", + "guster_banner_pattern": { + "material": "GUSTER_BANNER_PATTERN" + }, + "gusterbannerpattern": "guster_banner_pattern", + "minecraft:guster_banner_pattern": "guster_banner_pattern", "hanging_roots": { "material": "HANGING_ROOTS" }, @@ -8543,7 +8502,8 @@ "minecraft:hanging_roots": "hanging_roots", "harming_lingering_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8621,7 +8581,8 @@ "lingerpotinstantdamage": "harming_lingering_potion", "harming_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8649,7 +8610,8 @@ "potofinstantdamage": "harming_potion", "harming_splash_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8687,7 +8649,8 @@ "splinstantdamagepotion": "harming_splash_potion", "harming_tipped_arrow": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": false, "extended": false }, @@ -8729,7 +8692,8 @@ "minecraft:hay_block": "hay_block", "healing_lingering_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8807,7 +8771,8 @@ "lingerpotlife": "healing_lingering_potion", "healing_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8835,7 +8800,8 @@ "potoflife": "healing_potion", "healing_splash_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -8873,7 +8839,8 @@ "spllifepotion": "healing_splash_potion", "healing_tipped_arrow": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": false, "extended": false }, @@ -10977,7 +10944,8 @@ "minecraft:lead": "lead", "leaping_lingering_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11027,7 +10995,8 @@ "lingerpotleaping": "leaping_lingering_potion", "leaping_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11047,7 +11016,8 @@ "potofleaping": "leaping_potion", "leaping_splash_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -11073,7 +11043,8 @@ "splleappotion": "leaping_splash_potion", "leaping_tipped_arrow": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": false }, @@ -13313,7 +13284,8 @@ "invlongtippedarrow": "long_invisibility_tipped_arrow", "long_leaping_lingering_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -13531,7 +13503,8 @@ "lingerpotleaplong": "long_leaping_lingering_potion", "long_leaping_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -13599,7 +13572,8 @@ "potofleaplong": "long_leaping_potion", "long_leaping_splash_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -13697,7 +13671,8 @@ "splleaplongpotion": "long_leaping_splash_potion", "long_leaping_tipped_arrow": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": false, "extended": true }, @@ -15294,7 +15269,8 @@ "poisonlongtippedarrow": "long_poison_tipped_arrow", "long_regeneration_lingering_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -15512,7 +15488,8 @@ "regenlingerpotlong": "long_regeneration_lingering_potion", "long_regeneration_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -15580,7 +15557,8 @@ "regenlongpotion": "long_regeneration_potion", "long_regeneration_splash_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -15678,7 +15656,8 @@ "splregenlongpotion": "long_regeneration_splash_potion", "long_regeneration_tipped_arrow": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": true }, @@ -17017,7 +16996,8 @@ "stronglongtippedarrow": "long_strength_tipped_arrow", "long_swiftness_lingering_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -17235,7 +17215,8 @@ "swiftnesslingerpotlong": "long_swiftness_lingering_potion", "long_swiftness_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -17303,7 +17284,8 @@ "swiftnesslongpotion": "long_swiftness_potion", "long_swiftness_splash_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -17401,7 +17383,8 @@ "swiftnesslongsplashpotion": "long_swiftness_splash_potion", "long_swiftness_tipped_arrow": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": true }, @@ -19935,6 +19918,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 +20339,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" }, @@ -25337,7 +25321,8 @@ "rstorch": "redstone_torch", "regeneration_lingering_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25387,7 +25372,8 @@ "regenlingerpot": "regeneration_lingering_potion", "regeneration_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25407,7 +25393,8 @@ "regenpotion": "regeneration_potion", "regeneration_splash_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25433,7 +25420,8 @@ "splregenpotion": "regeneration_splash_potion", "regeneration_tipped_arrow": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": false, "extended": false }, @@ -25689,10 +25677,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 +26578,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 +28432,8 @@ "warpstrippedlog": "stripped_warped_stem", "strong_harming_lingering_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28626,7 +28651,8 @@ "lingerpotinstantdamagestrong": "strong_harming_lingering_potion", "strong_harming_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28694,7 +28720,8 @@ "potofinstantdamagestrong": "strong_harming_potion", "strong_harming_splash_potion": { "potionData": { - "type": "INSTANT_DAMAGE", + "type": "HARMING", + "fallbackType": "INSTANT_DAMAGE", "upgraded": true, "extended": false }, @@ -28792,7 +28819,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 +28903,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 +29122,8 @@ "lingerpotlifestrong": "strong_healing_lingering_potion", "strong_healing_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": true, "extended": false }, @@ -29161,7 +29191,8 @@ "potoflifestrong": "strong_healing_potion", "strong_healing_splash_potion": { "potionData": { - "type": "INSTANT_HEAL", + "type": "HEALING", + "fallbackType": "INSTANT_HEAL", "upgraded": true, "extended": false }, @@ -29259,7 +29290,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 +29374,8 @@ "lifestrongtippedarrow": "strong_healing_tipped_arrow", "strong_leaping_lingering_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29476,7 +29509,8 @@ "lingerpotleapstrong": "strong_leaping_lingering_potion", "strong_leaping_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29520,7 +29554,8 @@ "potofleapstrong": "strong_leaping_potion", "strong_leaping_splash_potion": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29582,7 +29617,8 @@ "splleapstrongpotion": "strong_leaping_splash_potion", "strong_leaping_tipped_arrow": { "potionData": { - "type": "JUMP", + "type": "LEAPING", + "fallbackType": "JUMP", "upgraded": true, "extended": false }, @@ -29928,7 +29964,8 @@ "pstrongtippedarrow": "strong_poison_tipped_arrow", "strong_regeneration_lingering_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30062,7 +30099,8 @@ "regenlingerpotstrong": "strong_regeneration_lingering_potion", "strong_regeneration_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30106,7 +30144,8 @@ "regenstrongpotion": "strong_regeneration_potion", "strong_regeneration_splash_potion": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30168,7 +30207,8 @@ "splregenstrongpotion": "strong_regeneration_splash_potion", "strong_regeneration_tipped_arrow": { "potionData": { - "type": "REGEN", + "type": "REGENERATION", + "fallbackType": "REGEN", "upgraded": true, "extended": false }, @@ -30720,7 +30760,8 @@ "strstrongtippedarrow": "strong_strength_tipped_arrow", "strong_swiftness_lingering_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -30854,7 +30895,8 @@ "swiftnesslingerpotstrong": "strong_swiftness_lingering_potion", "strong_swiftness_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -30898,7 +30940,8 @@ "swiftstrongpotion": "strong_swiftness_potion", "strong_swiftness_splash_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -30960,7 +31003,8 @@ "swiftstrongsplashpotion": "strong_swiftness_splash_potion", "strong_swiftness_tipped_arrow": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": true, "extended": false }, @@ -31353,7 +31397,8 @@ "sweetberries": "sweet_berries", "swiftness_lingering_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31403,7 +31448,8 @@ "swiftnesslingerpot": "swiftness_lingering_potion", "swiftness_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31423,7 +31469,8 @@ "swiftpotion": "swiftness_potion", "swiftness_splash_potion": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31449,7 +31496,8 @@ "swiftsplashpotion": "swiftness_splash_potion", "swiftness_tipped_arrow": { "potionData": { - "type": "SPEED", + "type": "SWIFTNESS", + "fallbackType": "SPEED", "upgraded": false, "extended": false }, @@ -31983,6 +32031,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" }, @@ -42340,6 +42395,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" }, From aec5859c2a203bcbe2c4823ac90847795b417c3c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 16 May 2024 16:54:26 -0400 Subject: [PATCH 41/57] Fix console error during /give command There has been a method for this since 1.13. Why have we been using this for so long? Since item NBT is now dead, this method for checking if an item is spawn-able is defunct and produces a console error every time the give command is ran. --- .../earth2me/essentials/MetaItemStack.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 989e6fb76..7926a31c8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -129,17 +129,20 @@ public class MetaItemStack { } 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 { From e7a41671110ac51a4c86a5c0ae59b702a0c9cc55 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 20 May 2024 13:52:48 -0400 Subject: [PATCH 42/57] Add support for data components --- .../earth2me/essentials/MetaItemStack.java | 22 +++++++++++++++++++ .../src/main/resources/messages.properties | 2 ++ 2 files changed, 24 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 7926a31c8..7aa45627e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -146,7 +146,13 @@ public class MetaItemStack { } 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) { @@ -158,6 +164,22 @@ public class MetaItemStack { } 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); diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index c1d1bf843..d2d07e06d 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -863,8 +863,10 @@ noLocationFound=No valid location found. noMail=You do not have any mail. noMailOther={0} does not have any mail. noMatchingPlayers=No matching players found. +noMetaComponents=Data Components are not supported in this version of Bukkit. Please use JSON NBT metadata. noMetaFirework=You do not have permission to apply firework meta. noMetaJson=JSON Metadata is not supported in this version of Bukkit. +noMetaNbtKill=JSON NBT metadata is no longer supported. You must manually convert your defined items to data components. You can convert JSON NBT to data components here: https://docs.papermc.io/misc/tools/item-command-converter noMetaPerm=You do not have permission to apply {0} meta to this item. none=none noNewMail=You have no new mail. From 434e7a0e704bf9446ca672a8445caec3983799d3 Mon Sep 17 00:00:00 2001 From: "Pantera (Mad_Daniel)" <89838384+Pantera07@users.noreply.github.com> Date: Mon, 3 Jun 2024 00:42:27 +0900 Subject: [PATCH 43/57] Update adventure (#5819) --- Essentials/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Essentials/build.gradle b/Essentials/build.gradle index 84b9e3bfc..f6b35b368 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') From 3a6fdd9bf30463f68ba819f7583204ff963eb36c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 2 Jun 2024 19:34:47 -0400 Subject: [PATCH 44/57] Fix exception on 1.20.6 with Spigot (#5820) How could I forget to update the md_5 magic letter Fixes #5818 --- .../src/main/java/net/ess3/nms/refl/ReflUtil.java | 1 + .../net/ess3/nms/refl/providers/ReflServerStateProvider.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) 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 61a97f38f..e358cb29e 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 d67eb1d4b..86711facb 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 class ReflServerStateProvider implements ServerStateProvider { 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"; From 29a122ea5edb5a4f71a05bd3f72881b1e7958bb6 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:02:52 -0400 Subject: [PATCH 45/57] Update toolchain --- build-logic/build.gradle.kts | 2 +- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index d306fc9d9..383b8c309 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -9,5 +9,5 @@ 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("xyz.jpenilla", "run-task", "2.3.0") } 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 f337b6fb0..6b6495984 100644 --- a/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/essentials.base-conventions.gradle.kts @@ -125,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) } From cecc00a3b607ab49cd044d330963ee5acf3cf881 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:06:24 -0400 Subject: [PATCH 46/57] Update to Minecraft 1.21 --- .../main/java/com/earth2me/essentials/utils/VersionUtil.java | 3 ++- README.md | 2 +- build-logic/src/main/kotlin/constants.kt | 2 +- .../src/main/kotlin/essentials.base-conventions.gradle.kts | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) 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 9eb937fb4..2527575c4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -40,8 +40,9 @@ public final class VersionUtil { 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"); - 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); + 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_R01); public static final boolean PRE_FLATTENING = VersionUtil.getServerBukkitVersion().isLowerThan(VersionUtil.v1_13_0_R01); diff --git a/README.md b/README.md index 76db8f564..14783eae1 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.6.** + 1.16.5, 1.17.1, 1.18.2, 1.19.4, 1.20.6, and 1.21.** * **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/src/main/kotlin/constants.kt b/build-logic/src/main/kotlin/constants.kt index 60793a152..f883945c3 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.6" +const val RUN_PAPER_MINECRAFT_VERSION = "1.21" 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 6b6495984..3d1f04671 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.6-R0.1-SNAPSHOT" +val spigotVersion = "1.21-R0.1-SNAPSHOT" val junit5Version = "5.10.2" val mockitoVersion = "3.12.4" From 022b0049b4158a3dde27c4f058b5bd5a8f1469cc Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:05:28 -0400 Subject: [PATCH 47/57] Add support for 1.21 Mobs --- Essentials/src/main/java/com/earth2me/essentials/Mob.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Mob.java b/Essentials/src/main/java/com/earth2me/essentials/Mob.java index 735b18a99..fe6f0f85b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Mob.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Mob.java @@ -113,6 +113,8 @@ public enum Mob { 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<>(); From 6624e6688cfc12ba35f76d9a882ed24ae1e27243 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:10:53 -0400 Subject: [PATCH 48/57] Add support for 1.21 potions --- .../java/com/earth2me/essentials/Potions.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Potions.java b/Essentials/src/main/java/com/earth2me/essentials/Potions.java index 21eb45ff4..c6b8ae4ae 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Potions.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Potions.java @@ -144,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() { From 1ea080effafeedf4991c8c77e00c36d9b817c849 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:13:39 -0400 Subject: [PATCH 49/57] Add support for 1.21 enchantments --- .../com/earth2me/essentials/Enchantments.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java index c75fc6aa3..d6e9cf071 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java @@ -303,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"); From 64531aa862b10ee5c458ca853375d34c49d6bac3 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 22 Jun 2024 13:38:55 -0400 Subject: [PATCH 50/57] Update items.json for 1.21 --- Essentials/src/main/resources/items.json | 3822 ++++++++++++++++++++++ 1 file changed, 3822 insertions(+) diff --git a/Essentials/src/main/resources/items.json b/Essentials/src/main/resources/items.json index ef9363e4b..af3a67dba 100644 --- a/Essentials/src/main/resources/items.json +++ b/Essentials/src/main/resources/items.json @@ -2081,6 +2081,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" }, @@ -2136,6 +2166,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" }, @@ -3044,6 +3103,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" }, @@ -3386,6 +3459,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" }, @@ -4193,6 +4304,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" }, @@ -4234,6 +4360,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" }, @@ -4399,6 +4530,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" }, @@ -6630,6 +6765,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" }, @@ -6644,6 +6838,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" }, @@ -7105,11 +7352,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" }, @@ -8489,6 +8748,13 @@ }, "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" }, @@ -8890,6 +9156,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" }, @@ -9655,6 +9926,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" }, @@ -9780,6 +10087,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" }, @@ -9918,6 +10261,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" }, @@ -19279,6 +19640,10 @@ "luckytarr": "luck_tipped_arrow", "luckytarrow": "luck_tipped_arrow", "luckytippedarrow": "luck_tipped_arrow", + "mace": { + "material": "MACE" + }, + "minecraft:mace": "mace", "magenta_banner": { "material": "MAGENTA_BANNER" }, @@ -20741,6 +21106,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" }, @@ -21193,6 +21583,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" }, @@ -22475,6 +22885,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" }, @@ -22623,6 +23134,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" }, @@ -22640,6 +23228,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" }, @@ -24212,6 +24864,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" }, @@ -25645,6 +26354,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" }, @@ -31768,6 +32483,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" }, @@ -31902,6 +32627,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" }, @@ -32068,6 +32836,10 @@ "twistingvines": "twisting_vines", "twistvine": "twisting_vines", "twistvines": "twisting_vines", + "vault": { + "material": "VAULT" + }, + "minecraft:vault": "vault", "verdant_froglight": { "material": "VERDANT_FROGLIGHT" }, @@ -32723,6 +33495,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" }, @@ -32736,6 +33567,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" }, @@ -33001,6 +33885,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" }, @@ -33060,6 +34435,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" }, @@ -35341,6 +36934,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" }, @@ -35418,6 +37664,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" }, @@ -38455,6 +40985,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" }, @@ -38532,6 +41715,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" }, @@ -41694,6 +45161,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" }, @@ -41711,6 +45255,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" }, @@ -42060,6 +45668,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" }, @@ -42224,6 +45922,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" }, From b392f03ad1e01cbb204d44221155831841abecfa Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Mon, 24 Jun 2024 18:09:12 -0400 Subject: [PATCH 51/57] Use enchantment key names for 1.13+ Enchantment#getName is deprecated and gives the wrong names for enchantments starting in 1.21 --- .../java/com/earth2me/essentials/Enchantments.java | 11 +++++++++++ .../java/com/earth2me/essentials/MetaItemStack.java | 6 +++--- .../earth2me/essentials/commands/Commandenchant.java | 5 ++--- .../com/earth2me/essentials/items/AbstractItemDb.java | 5 +++-- .../com/earth2me/essentials/signs/SignEnchant.java | 2 +- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java index d6e9cf071..6464258f2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Enchantments.java @@ -334,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/MetaItemStack.java b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java index 7aa45627e..a317b2ff2 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MetaItemStack.java @@ -576,7 +576,7 @@ public class MetaItemStack { 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 { @@ -619,7 +619,7 @@ public class MetaItemStack { } } } catch (final Exception ex) { - throw new Exception("Enchantment " + enchantment.getName() + ": " + ex.getMessage(), ex); + throw new Exception("Enchantment " + Enchantments.getRealName(enchantment) + ": " + ex.getMessage(), ex); } } @@ -629,7 +629,7 @@ public class MetaItemStack { 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); 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 091ee56a7..3e3c652b1 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 org.bukkit.inventory.ItemStack; 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 @@ public class Commandenchant extends EssentialsCommand { 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 @@ public class Commandenchant extends EssentialsCommand { 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/items/AbstractItemDb.java b/Essentials/src/main/java/com/earth2me/essentials/items/AbstractItemDb.java index 9b9b72656..79043276d 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; @@ -218,7 +219,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb { 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(" "); } } @@ -263,7 +264,7 @@ public abstract class AbstractItemDb implements IConf, net.ess3.api.IItemDb { 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; } 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 47f29285a..fe6734230 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 @@ public class SignEnchant extends EssentialsSign { 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 { From 9e57dd6aef2606b76bd194ab11ac587d70ab80db Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 29 Jun 2024 14:38:36 -0400 Subject: [PATCH 52/57] Fix NPE when using avatars in discord module (Fixes #5748) --- .../main/java/net/essentialsx/discord/JDADiscordService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java b/EssentialsDiscord/src/main/java/net/essentialsx/discord/JDADiscordService.java index ebc023d8b..2843e55af 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 class JDADiscordService implements DiscordService, IEssentialsModule { 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()); From fcf6e64732e116b2d2d2e2c1f0cc67dd7b4602d5 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:44:43 -0400 Subject: [PATCH 53/57] Fix legacy compatibility (Fixes #5851) --- .../com/earth2me/essentials/Essentials.java | 24 ++++++++++++-- .../essentials/EssentialsPlayerListener.java | 10 +++--- .../com/earth2me/essentials/IEssentials.java | 3 ++ .../essentials/commands/Commandrecipe.java | 4 +-- .../LegacyInventoryViewProvider.java | 33 +++++++++++++++++++ .../ess3/provider/InventoryViewProvider.java | 19 +++++++++++ .../providers/BaseInventoryViewProvider.java | 33 +++++++++++++++++++ 7 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 providers/1_12Provider/src/main/java/net/ess3/provider/providers/LegacyInventoryViewProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/InventoryViewProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseInventoryViewProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 778855e0c..e2a2ff13e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -64,6 +64,7 @@ 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; @@ -80,6 +81,7 @@ 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.BlockMetaSpawnerItemProvider; import net.ess3.provider.providers.BukkitMaterialTagProvider; @@ -88,6 +90,7 @@ 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; @@ -130,6 +133,7 @@ import org.bukkit.event.Listener; 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; @@ -206,6 +210,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; @@ -504,6 +509,12 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { 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(); } @@ -928,12 +939,14 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { 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); } @@ -1385,6 +1398,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { 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 02be19c1a..0b3ad90b8 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 class EssentialsPlayerListener implements Listener, FakeAccessor { } 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()); @@ -897,14 +897,14 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { @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()); @@ -963,7 +963,7 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { @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()); @@ -977,7 +977,7 @@ public class EssentialsPlayerListener implements Listener, FakeAccessor { 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/IEssentials.java b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java index 5fbb1bf87..598b1abe5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/IEssentials.java @@ -14,6 +14,7 @@ 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; @@ -192,5 +193,7 @@ public interface IEssentials extends Plugin { BannerDataProvider getBannerDataProvider(); + InventoryViewProvider getInventoryViewProvider(); + PluginCommand getPluginCommand(String cmd); } 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 b08a673a0..448d2476e 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrecipe.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandrecipe.java @@ -131,7 +131,7 @@ public class Commandrecipe extends EssentialsCommand { 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 { @@ -174,7 +174,7 @@ public class Commandrecipe extends EssentialsCommand { 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/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 000000000..1fd5ca68f --- /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/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 000000000..49ad34612 --- /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/providers/BaseInventoryViewProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BaseInventoryViewProvider.java new file mode 100644 index 000000000..d6b8194e2 --- /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"; + } +} From 8971798a90591103135f42c045af75dd0cd129c1 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 13 Jul 2024 18:24:33 -0400 Subject: [PATCH 54/57] Fix build on new spigot versions Villager.Profession was moved to a registry, only breaks at compile time. --- Essentials/src/main/java/com/earth2me/essentials/MobCompat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java b/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java index 092e8d775..f939d42ec 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java +++ b/Essentials/src/main/java/com/earth2me/essentials/MobCompat.java @@ -296,7 +296,7 @@ public final class MobCompat { } private Villager.Profession asEnum() { - return EnumUtil.valueOf(Villager.Profession.class, newProfession, oldProfession); + return RegistryUtil.valueOf(Villager.Profession.class, newProfession, oldProfession); } } From 33e086ff05e02fd253b7c9b91a0304fc7877293d Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sat, 13 Jul 2024 18:25:48 -0400 Subject: [PATCH 55/57] Fix notEnoughMoney message not being translated correctly Fixes #5759 --- .../com/earth2me/essentials/commands/Commandpay.java | 4 +++- .../essentials/commands/EssentialsLoopCommand.java | 11 ++++++----- .../com/earth2me/essentials/xmpp/Commandxmppspy.java | 7 ++----- 3 files changed, 11 insertions(+), 11 deletions(-) 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 734c90fc8..38778c2fa 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 class Commandpay extends EssentialsLoopCommand { 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/EssentialsLoopCommand.java b/Essentials/src/main/java/com/earth2me/essentials/commands/EssentialsLoopCommand.java index 4c48caa3e..18418c587 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.User; 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 abstract class EssentialsLoopCommand extends EssentialsCommand { 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 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand { } } - 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 @@ public abstract class EssentialsLoopCommand extends EssentialsCommand { } public interface UserConsumer { - void accept(User user) throws PlayerNotFoundException, NotEnoughArgumentsException, PlayerExemptException, ChargeException, MaxMoneyException; + void accept(User user) throws NotEnoughArgumentsException, TranslatableException; } } 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 ef586c4b1..ad6c7d1a5 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 class Commandxmppspy extends EssentialsLoopCommand { } @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(); } From 80c3150e44f7ff06afb524e86e8d5d0e8aa90a9c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:48:16 -0400 Subject: [PATCH 56/57] Fix trade signs not updating signs (Fixes #5814) i guess these things are transactional now whatever --- .../java/com/earth2me/essentials/signs/EssentialsSign.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 39921ee3f..97cac9e5b 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 class EssentialsSign { 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 class EssentialsSign { @Override public final void setLine(final int index, final String text) { - getSign().setLine(index, text); + sign.setLine(index, text); updateSign(); } @@ -586,7 +588,8 @@ public class EssentialsSign { @Override public final void updateSign() { - getSign().update(); + sign.update(); + sign = getSign(); } } } From 8b08a8f2c8e2e6a9afa1d17a8176b9d26e385d99 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Tue, 23 Jul 2024 13:20:12 -0700 Subject: [PATCH 57/57] Update placeholder colors for eco give (#5738) --- Essentials/src/main/resources/messages.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/resources/messages.properties b/Essentials/src/main/resources/messages.properties index d2d07e06d..19125df7a 100644 --- a/Essentials/src/main/resources/messages.properties +++ b/Essentials/src/main/resources/messages.properties @@ -1,7 +1,7 @@ #Sat Feb 03 17:34:46 GMT 2024 action=* {0} {1} -addedToAccount={0} has been added to your account. -addedToOthersAccount={0} added to {1} account. New balance\: {2} +addedToAccount={0} has been added to your account. +addedToOthersAccount={0} added to {1} account. New balance\: {2} adventure=adventure afkCommandDescription=Marks you as away-from-keyboard. afkCommandUsage=/ [player/message...]