diff --git a/build.gradle b/build.gradle index d100733d..a40dab5c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.0.+' + id 'fabric-loom' version '1.1.+' id 'maven-publish' } @@ -24,10 +24,10 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation 'xyz.nucleoid:plasmid:0.5+1.19.3-SNAPSHOT' - modImplementation include('xyz.nucleoid:more-codecs:0.3.0+1.19.3') + modImplementation 'xyz.nucleoid:plasmid:0.5+1.19.4-SNAPSHOT' + modImplementation include('xyz.nucleoid:more-codecs:0.3.1+1.19.4') - modCompileOnly "com.viaversion:viaversion-api:4.5.1-SNAPSHOT" + //modCompileOnly "com.viaversion:viaversion-api:4.5.1-SNAPSHOT" modCompileOnly "dev.gegy:player-roles-api:1.6.0" } diff --git a/gradle.properties b/gradle.properties index 8631324c..3b745b37 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,12 +2,12 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties -minecraft_version=1.19.3 -yarn_mappings=1.19.3+build.2 -loader_version=0.14.11 +minecraft_version=1.19.4 +yarn_mappings=1.19.4+build.1 +loader_version=0.14.17 # Dependencies -fabric_version=0.68.1+1.19.3 +fabric_version=0.75.3+1.19.4 # Mod Properties mod_version=1.3.1 diff --git a/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java b/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java index 5a9ae71b..4c8ea765 100644 --- a/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java +++ b/src/main/java/xyz/nucleoid/extras/NucleoidExtras.java @@ -1,5 +1,6 @@ package xyz.nucleoid.extras; +import eu.pb4.playerdata.api.PlayerDataApi; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.server.MinecraftServer; @@ -8,14 +9,14 @@ import org.apache.logging.log4j.Logger; import xyz.nucleoid.extras.chat_filter.ChatFilter; import xyz.nucleoid.extras.command.CommandAliases; +import xyz.nucleoid.extras.command.ExtraCommands; import xyz.nucleoid.extras.error.ExtrasErrorReporter; import xyz.nucleoid.extras.game_portal.ExtrasGamePortals; import xyz.nucleoid.extras.game_portal.ServerChangePortalBackend; import xyz.nucleoid.extras.integrations.NucleoidIntegrations; -import xyz.nucleoid.extras.lobby.NEBlocks; -import xyz.nucleoid.extras.lobby.NECriteria; -import xyz.nucleoid.extras.lobby.NEEntities; -import xyz.nucleoid.extras.lobby.NEItems; +import xyz.nucleoid.extras.integrations.http.NucleoidHttpClient; +import xyz.nucleoid.extras.lobby.*; +import xyz.nucleoid.extras.lobby.contributor.ContributorData; import xyz.nucleoid.extras.placeholder.ExtraPlaceholders; import xyz.nucleoid.extras.scheduled_stop.ScheduledStop; import xyz.nucleoid.extras.sidebar.NucleoidSidebar; @@ -36,10 +37,15 @@ public void onInitialize() { ScheduledStop.register(); NucleoidIntegrations.register(); + NucleoidHttpClient.register(); + ContributorData.register(); ExtrasErrorReporter.register(); ExtraPlaceholders.register(); ExtrasGamePortals.register(); + ExtraCommands.register(); + + PlayerDataApi.register(PlayerLobbyState.STORAGE); ServerTickEvents.END_SERVER_TICK.register(NucleoidExtras::onServerTick); ServerChangePortalBackend.register(); diff --git a/src/main/java/xyz/nucleoid/extras/NucleoidExtrasConfig.java b/src/main/java/xyz/nucleoid/extras/NucleoidExtrasConfig.java index d04a5333..25660907 100644 --- a/src/main/java/xyz/nucleoid/extras/NucleoidExtrasConfig.java +++ b/src/main/java/xyz/nucleoid/extras/NucleoidExtrasConfig.java @@ -11,13 +11,17 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import net.minecraft.util.Identifier; +import xyz.nucleoid.codecs.MoreCodecs; import xyz.nucleoid.extras.chat_filter.ChatFilterConfig; import xyz.nucleoid.extras.command.CommandAliasConfig; import xyz.nucleoid.extras.error.ErrorReportingConfig; import xyz.nucleoid.extras.integrations.IntegrationsConfig; +import xyz.nucleoid.extras.util.ExtraCodecs; import java.io.IOException; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -30,8 +34,10 @@ public record NucleoidExtrasConfig( @Nullable IntegrationsConfig integrations, @Nullable CommandAliasConfig aliases, @Nullable ChatFilterConfig chatFilter, + @Nullable URL contributorDataUrl, ErrorReportingConfig errorReporting, - boolean devServer + boolean devServer, + URI httpApi ) { private static final Path PATH = Paths.get("config/nucleoid.json"); @@ -44,17 +50,19 @@ public record NucleoidExtrasConfig( IntegrationsConfig.CODEC.optionalFieldOf("integrations").forGetter(config -> Optional.ofNullable(config.integrations())), CommandAliasConfig.CODEC.optionalFieldOf("aliases").forGetter(config -> Optional.ofNullable(config.aliases())), ChatFilterConfig.CODEC.optionalFieldOf("chat_filter").forGetter(config -> Optional.ofNullable(config.chatFilter())), + MoreCodecs.url("https").optionalFieldOf("contributor_data_url").forGetter(config -> Optional.ofNullable(config.contributorDataUrl())), ErrorReportingConfig.CODEC.optionalFieldOf("error_reporting", ErrorReportingConfig.NONE).forGetter(NucleoidExtrasConfig::errorReporting), - Codec.BOOL.optionalFieldOf("devServer", false).forGetter(NucleoidExtrasConfig::devServer) - ).apply(instance, (sidebar, gamePortalOpener, integrations, aliases, filter, errorReporting, devServer) -> - new NucleoidExtrasConfig(sidebar, gamePortalOpener, integrations.orElse(null), aliases.orElse(null), filter.orElse(null), errorReporting, devServer) + Codec.BOOL.optionalFieldOf("dev_server", false).forGetter(NucleoidExtrasConfig::devServer), + ExtraCodecs.URI.optionalFieldOf("http_api").forGetter(config -> Optional.ofNullable(config.httpApi())) + ).apply(instance, (sidebar, gamePortalOpener, integrations, aliases, filter, contributorDataUrl, errorReporting, devServer, httpApiUrl) -> + new NucleoidExtrasConfig(sidebar, gamePortalOpener, integrations.orElse(null), aliases.orElse(null), filter.orElse(null), contributorDataUrl.orElse(null), errorReporting, devServer, httpApiUrl.orElse(null)) ) ); private static NucleoidExtrasConfig instance; private NucleoidExtrasConfig() { - this(false, Optional.empty(), null, null, null, ErrorReportingConfig.NONE, false); + this(false, Optional.empty(), null, null, null, null, ErrorReportingConfig.NONE, false, null); } @NotNull diff --git a/src/main/java/xyz/nucleoid/extras/command/ExtraCommands.java b/src/main/java/xyz/nucleoid/extras/command/ExtraCommands.java new file mode 100644 index 00000000..6a8f2e9d --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/command/ExtraCommands.java @@ -0,0 +1,18 @@ +package xyz.nucleoid.extras.command; + +import com.mojang.brigadier.CommandDispatcher; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.minecraft.command.CommandRegistryAccess; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.stat.Stat; + +public class ExtraCommands { + public static void register() { + CommandRegistrationCallback.EVENT.register(ExtraCommands::register); + } + + private static void register(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess, CommandManager.RegistrationEnvironment environment) { + StatsCommand.register(dispatcher); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/command/StatsCommand.java b/src/main/java/xyz/nucleoid/extras/command/StatsCommand.java new file mode 100644 index 00000000..43dc1432 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/command/StatsCommand.java @@ -0,0 +1,94 @@ +package xyz.nucleoid.extras.command; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import eu.pb4.sgui.api.GuiHelpers; +import eu.pb4.sgui.api.elements.GuiElementBuilder; +import eu.pb4.sgui.api.elements.GuiElementInterface; +import eu.pb4.sgui.api.gui.SimpleGui; +import net.minecraft.item.Items; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.util.Util; +import xyz.nucleoid.extras.integrations.game.StatisticsIntegration; +import xyz.nucleoid.extras.integrations.http.NucleoidHttpClient; +import xyz.nucleoid.extras.util.CommonGuiElements; +import xyz.nucleoid.extras.util.PagedGui; +import xyz.nucleoid.plasmid.game.stats.GameStatisticBundle; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Map; + +import static net.minecraft.server.command.CommandManager.literal; + +public class StatsCommand { + public static void register(CommandDispatcher dispatcher) { + dispatcher.register(literal("stats").executes(StatsCommand::openScreen)); + } + + private static int openScreen(CommandContext context) throws CommandSyntaxException { + + + var base = Text.translatable("text.nucleoid_extras.statistics.waiting").append(" "); + + var gui = new SimpleGui(ScreenHandlerType.GENERIC_9X6, context.getSource().getPlayerOrThrow(), false) { + int tick = 0; + + @Override + public void onTick() { + this.setTitle(base.copy().append(".".repeat((this.tick / 20) % 4))); + tick++; + } + }; + + while (gui.getFirstEmptySlot() != -1) { + gui.addSlot(CommonGuiElements.white()); + } + + gui.setTitle(base.copy()); + + gui.open(); + + NucleoidHttpClient.getPlayerStats(context.getSource().getPlayerOrThrow().getUuid()).thenAcceptAsync(data -> { + openMain(data, context.getSource().getPlayer()); + }, context.getSource().getServer()); + + return 0; + } + + private static void openMain(Map> stats, ServerPlayerEntity player) { + var list = new ArrayList(); + for (var entry : stats.entrySet()) { + var builder = new GuiElementBuilder(Items.PAPER); + builder.setName(Text.translatable(GameStatisticBundle.getTranslationKey(entry.getKey()))); + builder.setCallback((a, b, c, d) -> { + PagedGui.playClickSound(player); + openTargetStats(entry.getKey(), entry.getValue(), player); + }); + list.add(builder.build()); + } + list.sort(Comparator.comparing(x -> x.getItemStack().getName().getString())); + var gui = PagedGui.of(player, list, null); + gui.setTitle(Text.translatable("text.nucleoid_extras.statistics.list_ui")); + gui.open(); + } + + private static void openTargetStats(String key, Map value, ServerPlayerEntity player) { + var cGui = GuiHelpers.getCurrentGui(player); + var list = new ArrayList(); + for (var entry : value.entrySet()) { + var builder = new GuiElementBuilder(Items.NAME_TAG); + builder.setName(Text.empty().append(Util.createTranslationKey("statistic", entry.getKey())).append(": ").append(StatisticsIntegration.convertForDisplay(entry.getKey(), entry.getValue()))); + list.add(builder.build()); + } + list.sort(Comparator.comparing(x -> x.getItemStack().getName().getString())); + var g = PagedGui.of(player, list, (id) -> id == 8 ? CommonGuiElements.back(cGui::open).build() : null); + g.setTitle(Text.translatable(GameStatisticBundle.getTranslationKey(key))); + g.open(); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/error/DiscordWebhook.java b/src/main/java/xyz/nucleoid/extras/error/DiscordWebhook.java index 13198936..b0052289 100644 --- a/src/main/java/xyz/nucleoid/extras/error/DiscordWebhook.java +++ b/src/main/java/xyz/nucleoid/extras/error/DiscordWebhook.java @@ -17,7 +17,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; -record DiscordWebhook(String url) { +record DiscordWebhook(URL url) { private static final Executor EXECUTOR = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() .setNameFormat("webhook-error-reporter") .setDaemon(true) @@ -27,14 +27,14 @@ record DiscordWebhook(String url) { private static final String BOUNDARY = Long.toHexString(System.nanoTime()); private static final String CONTENT_TYPE = "multipart/form-data;boundary=\"" + BOUNDARY + "\""; - public static DiscordWebhook open(String url) { + public static DiscordWebhook open(URL url) { return new DiscordWebhook(url); } public void post(Message message) { EXECUTOR.execute(() -> { try { - var connection = (HttpsURLConnection) new URL(this.url).openConnection(); + var connection = (HttpsURLConnection) this.url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", CONTENT_TYPE); diff --git a/src/main/java/xyz/nucleoid/extras/error/ErrorReportingConfig.java b/src/main/java/xyz/nucleoid/extras/error/ErrorReportingConfig.java index 3d1f0967..33acfe2b 100644 --- a/src/main/java/xyz/nucleoid/extras/error/ErrorReportingConfig.java +++ b/src/main/java/xyz/nucleoid/extras/error/ErrorReportingConfig.java @@ -2,19 +2,21 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import joptsimple.internal.Strings; +import xyz.nucleoid.codecs.MoreCodecs; +import java.net.URL; +import java.util.Optional; import org.jetbrains.annotations.Nullable; public record ErrorReportingConfig( - String discordWebhookUrl + Optional discordWebhookUrl ) { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.STRING.optionalFieldOf("discord_webhook_url", "").forGetter(config -> config.discordWebhookUrl) + MoreCodecs.url("https").optionalFieldOf("discord_webhook_url").forGetter(config -> config.discordWebhookUrl) ).apply(instance, ErrorReportingConfig::new) ); - public static final ErrorReportingConfig NONE = new ErrorReportingConfig(null); + public static final ErrorReportingConfig NONE = new ErrorReportingConfig(Optional.empty()); @Nullable public DiscordGameErrorHandler openErrorHandler(String source) { @@ -25,13 +27,6 @@ public DiscordGameErrorHandler openErrorHandler(String source) { @Nullable public DiscordWebhook openDiscordWebhook() { var url = this.discordWebhookUrl(); - return url != null ? DiscordWebhook.open(url) : null; - } - - @Override - @Nullable - public String discordWebhookUrl() { - var url = this.discordWebhookUrl; - return !Strings.isNullOrEmpty(url) ? url : null; + return url.map(DiscordWebhook::open).orElse(null); } } diff --git a/src/main/java/xyz/nucleoid/extras/game_portal/StyledMenuPortalBackend.java b/src/main/java/xyz/nucleoid/extras/game_portal/StyledMenuPortalBackend.java index 8f704f53..7684352d 100644 --- a/src/main/java/xyz/nucleoid/extras/game_portal/StyledMenuPortalBackend.java +++ b/src/main/java/xyz/nucleoid/extras/game_portal/StyledMenuPortalBackend.java @@ -106,17 +106,14 @@ public void applyTo(ServerPlayerEntity player) { var gui = new SimpleGui(ScreenHandlerType.GENERIC_9X6, player, false); gui.setTitle(this.uiTitle); - var filler = new GuiElementBuilder(Items.PURPLE_STAINED_GLASS_PANE).setName(Text.empty()); + var filler = CommonGuiElements.purple(); for (int i = 0; i < 9; i++) { gui.setSlot(5 * 9 + i, filler); } if (oldGui != null) { - gui.setSlot(5 * 9 + 8, new GuiElementBuilder(Items.STRUCTURE_VOID).setName(ScreenTexts.BACK).setCallback(() -> { - PagedGui.playClickSound(player); - oldGui.open(); - })); + gui.setSlot(5 * 9 + 8, CommonGuiElements.back(oldGui::open)); } this.fill(player, gui, false); diff --git a/src/main/java/xyz/nucleoid/extras/integrations/IntegrationsConfig.java b/src/main/java/xyz/nucleoid/extras/integrations/IntegrationsConfig.java index e676e581..f9d11306 100644 --- a/src/main/java/xyz/nucleoid/extras/integrations/IntegrationsConfig.java +++ b/src/main/java/xyz/nucleoid/extras/integrations/IntegrationsConfig.java @@ -3,10 +3,15 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import org.jetbrains.annotations.Nullable; +import xyz.nucleoid.codecs.MoreCodecs; +import xyz.nucleoid.extras.util.ExtraCodecs; +import java.net.URI; +import java.net.URL; import java.util.Collections; import java.util.Map; import java.util.Optional; +import java.util.function.Function; public record IntegrationsConfig( String channel, diff --git a/src/main/java/xyz/nucleoid/extras/integrations/NucleoidIntegrations.java b/src/main/java/xyz/nucleoid/extras/integrations/NucleoidIntegrations.java index 260a47de..b171f306 100644 --- a/src/main/java/xyz/nucleoid/extras/integrations/NucleoidIntegrations.java +++ b/src/main/java/xyz/nucleoid/extras/integrations/NucleoidIntegrations.java @@ -11,6 +11,7 @@ import xyz.nucleoid.extras.integrations.connection.IntegrationsProxy; import xyz.nucleoid.extras.integrations.game.GameStatusIntegration; import xyz.nucleoid.extras.integrations.game.StatisticsIntegration; +import xyz.nucleoid.extras.integrations.http.NucleoidHttpClient; import xyz.nucleoid.extras.integrations.relay.ChatRelayIntegration; import xyz.nucleoid.extras.integrations.relay.RemoteCommandIntegration; import xyz.nucleoid.extras.integrations.status.PlayerStatusIntegration; diff --git a/src/main/java/xyz/nucleoid/extras/integrations/game/StatisticsIntegration.java b/src/main/java/xyz/nucleoid/extras/integrations/game/StatisticsIntegration.java index 55777fb0..0d76173e 100644 --- a/src/main/java/xyz/nucleoid/extras/integrations/game/StatisticsIntegration.java +++ b/src/main/java/xyz/nucleoid/extras/integrations/game/StatisticsIntegration.java @@ -4,7 +4,10 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.ClickEvent; import net.minecraft.text.Text; +import net.minecraft.text.Texts; import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.MathHelper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import xyz.nucleoid.extras.integrations.IntegrationSender; @@ -14,6 +17,7 @@ import xyz.nucleoid.plasmid.game.GameCloseReason; import xyz.nucleoid.plasmid.game.GameSpace; import xyz.nucleoid.plasmid.game.stats.GameStatisticBundle; +import xyz.nucleoid.plasmid.game.stats.StatisticKey; import java.util.ArrayList; import java.util.Iterator; @@ -46,7 +50,7 @@ private void handleStatisticsBundle(GameSpace space, String namespace, GameStati stats.visitAllStatistics((key, value) -> { if (!key.hidden()) { player.sendMessage(Text.translatable("text.nucleoid_extras.statistics.stat", - Text.translatable(key.getTranslationKey()), roundForDisplay(value)), false); + Text.translatable(key.getTranslationKey()), convertForDisplay(key.id(), value)), false); } }); @@ -90,14 +94,34 @@ private void onConnectionOpen() { } } - private static String roundForDisplay(Number number) { - if (number instanceof Double d) { - return String.format("%.2f", d); - } else if (number instanceof Float f) { - return String.format("%.2f", f); + public static Text convertForDisplay(Identifier key, Number number) { + String base; + + if (key.getPath().endsWith("_time")) { + var seconds = number.doubleValue() / 20; + var text = Text.empty(); + if (seconds > 60) { + text.append(Text.translatable("gui.minutes", MathHelper.floor(seconds / 60))); + } + + if (seconds % 60 > 0.01 || text.getSiblings().isEmpty()) { + if (!text.getSiblings().isEmpty()) { + text.append(" "); + } + text.append(Text.translatable("text.nucleoid_extras.seconds", Text.literal((seconds - (int) seconds >= 0.005) ? String.format("%.2f", seconds % 60) : ("" + ((int)seconds) % 60)))); + } + return text; + } + + var doubleDisplay = Math.abs(number.doubleValue() - number.intValue()) >= 0.005; + + if (doubleDisplay) { + base = String.format("%.2f", number.doubleValue()); } else { - return String.format("%s", number); + base = Integer.toString(number.intValue()); } + + return Text.literal(base); } public static void bind(NucleoidIntegrations integrations, IntegrationsConfig config) { diff --git a/src/main/java/xyz/nucleoid/extras/integrations/http/LeaderboardEntry.java b/src/main/java/xyz/nucleoid/extras/integrations/http/LeaderboardEntry.java new file mode 100644 index 00000000..0ce728d7 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/integrations/http/LeaderboardEntry.java @@ -0,0 +1,18 @@ +package xyz.nucleoid.extras.integrations.http; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import xyz.nucleoid.extras.util.ExtraCodecs; + +import java.util.List; +import java.util.UUID; + +public record LeaderboardEntry(UUID playerUuid, int ranking, double value) { + public static Codec> CODEC = Codec.list(RecordCodecBuilder.create(instance -> + instance.group( + ExtraCodecs.STRING_UUID.fieldOf("player").forGetter(LeaderboardEntry::playerUuid), + Codec.INT.fieldOf("ranking").forGetter(LeaderboardEntry::ranking), + Codec.DOUBLE.fieldOf("value").forGetter(LeaderboardEntry::value) + ).apply(instance, LeaderboardEntry::new) + )); +} diff --git a/src/main/java/xyz/nucleoid/extras/integrations/http/NucleoidHttpClient.java b/src/main/java/xyz/nucleoid/extras/integrations/http/NucleoidHttpClient.java new file mode 100644 index 00000000..b10474fe --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/integrations/http/NucleoidHttpClient.java @@ -0,0 +1,103 @@ +package xyz.nucleoid.extras.integrations.http; + +import com.google.gson.JsonParser; +import com.mojang.serialization.Codec; +import com.mojang.serialization.JsonOps; +import net.minecraft.util.Identifier; +import xyz.nucleoid.extras.NucleoidExtrasConfig; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; + +import static java.time.temporal.ChronoUnit.SECONDS; + +public class NucleoidHttpClient { + private static final Codec>> PLAYER_STATS_CODEC = Codec.unboundedMap(Codec.STRING, Codec.unboundedMap(Identifier.CODEC, (Codec) (Object) Codec.DOUBLE)); + private static final HttpClient CLIENT = HttpClient.newHttpClient(); + + private static URI baseUri; + + public static CompletableFuture> getLeaderboard(Identifier id) { + return sendSimple("/leaderboard/" + id.toString(), LeaderboardEntry.CODEC, List::of); + } + + public static CompletableFuture> getPlayerRankings(UUID uuid) { + return sendSimple("/player/" + uuid.toString() + "/rankings", RankingsEntry.CODEC, Map::of); + } + + public static CompletableFuture>> getPlayerStats(UUID uuid) { + return sendSimple("/stats/player/" + uuid.toString() + "/rankings", PLAYER_STATS_CODEC, Map::of); + } + + private static CompletableFuture sendSimple(String path, Codec codec, Supplier fallback) { + if (baseUri == null) { + return CompletableFuture.supplyAsync(fallback); + } + + var request = HttpRequest.newBuilder() + .uri(baseUri.resolve(path)) + .GET() + .timeout(Duration.of(10, SECONDS)) + .build(); + + return send(request, codec, fallback); + + } + + private static CompletableFuture send(HttpRequest request, Codec codec, Supplier fallback) { + return CLIENT.sendAsync(request, codecHandler(codec)).handle((response, throwable) -> { + if (throwable != null) { + throwable.printStackTrace(); + return fallback.get(); + } else if (response.statusCode() != 200) { + return fallback.get(); + } + return response.body(); + }); + } + + + private static HttpResponse.BodyHandler codecHandler(Codec codec) { + return x -> HttpResponse.BodySubscribers.mapping(HttpResponse.BodySubscribers.ofString(charsetFrom(x.headers())), s -> codec.decode(JsonOps.INSTANCE, JsonParser.parseString(s)).result().get().getFirst()); + } + + public static Charset charsetFrom(HttpHeaders headers) { + String type = headers.firstValue("Content-type") + .orElse("text/html; charset=utf-8"); + int i = type.indexOf(";"); + if (i >= 0) type = type.substring(i + 1); + try { + i = type.toLowerCase(Locale.ROOT).indexOf("charset="); + var i2 = type.toLowerCase(Locale.ROOT).indexOf(";"); + String value = null; + if (i != -1) { + if (i2 != -1) { + value = type.substring(i, i2); + } else { + value = type.substring(i); + } + } + + if (value == null) return StandardCharsets.UTF_8; + return Charset.forName(value); + } catch (Throwable x) { + return StandardCharsets.UTF_8; + } + } + + public static void register() { + baseUri = NucleoidExtrasConfig.get().httpApi(); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/integrations/http/RankingsEntry.java b/src/main/java/xyz/nucleoid/extras/integrations/http/RankingsEntry.java new file mode 100644 index 00000000..ef5f73f3 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/integrations/http/RankingsEntry.java @@ -0,0 +1,14 @@ +package xyz.nucleoid.extras.integrations.http; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.util.Identifier; +import xyz.nucleoid.extras.util.ExtraCodecs; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public record RankingsEntry(int ranking, double value) { + public static Codec> CODEC = Codec.unboundedMap(Identifier.CODEC, Codec.list(Codec.DOUBLE).xmap(x -> new RankingsEntry(x.get(0).intValue(), x.get(1)), x -> List.of((double) x.ranking, x.value))); +} diff --git a/src/main/java/xyz/nucleoid/extras/integrations/relay/ChatRelayIntegration.java b/src/main/java/xyz/nucleoid/extras/integrations/relay/ChatRelayIntegration.java index 6b12b615..9b159e2a 100644 --- a/src/main/java/xyz/nucleoid/extras/integrations/relay/ChatRelayIntegration.java +++ b/src/main/java/xyz/nucleoid/extras/integrations/relay/ChatRelayIntegration.java @@ -3,6 +3,7 @@ import com.google.gson.JsonObject; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; +import net.minecraft.screen.ScreenTexts; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.*; @@ -79,7 +80,7 @@ private static ChatMessage parseMessage(JsonObject body) { private static String parseUserId(JsonObject user) { var name = user.get("name").getAsString(); int discriminator = user.get("discriminator").getAsInt(); - return name + "#" + discriminator; + return name + "#" + String.format("%04d", discriminator); } @NotNull @@ -206,7 +207,7 @@ static class MessageBuilder { boolean first = true; MessageBuilder(Text prefix) { - this.text = Text.empty().append(prefix).append(" "); + this.text = Text.empty().append(prefix).append(ScreenTexts.SPACE); } void append(MutableText text) { diff --git a/src/main/java/xyz/nucleoid/extras/lobby/NEBlocks.java b/src/main/java/xyz/nucleoid/extras/lobby/NEBlocks.java index d5cc1403..51a0dfe6 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/NEBlocks.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/NEBlocks.java @@ -25,9 +25,12 @@ import org.joml.Vector3f; import xyz.nucleoid.extras.NucleoidExtras; import xyz.nucleoid.extras.lobby.block.*; +import xyz.nucleoid.extras.lobby.block.tater.*; + +import java.util.Comparator; public class NEBlocks { - public static final Block NUCLEOID_LOGO = createTaterBlock(ParticleTypes.GLOW_SQUID_INK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDYzNzcxMTc2OSwKICAicHJvZmlsZUlkIiA6ICIzNmMxODk4ZjlhZGE0NjZlYjk0ZDFmZWFmMjQ0MTkxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJMdW5haWFuIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2JhYzc0MDBkZmNiOWEzODczNjFhM2FkN2MyOTY5NDNlYjg0MWE5YmRhMTNhZDg5NTU4ZTJkNmVmZWJmMTY3YmMiCiAgICB9CiAgfQp9"); + public static final Block NUCLEOID_LOGO = createTaterBlock(ParticleTypes.GLOW_SQUID_INK, "bac7400dfcb9a387361a3ad7c296943eb841a9bda13ad89558e2d6efebf167bc"); public static final Block END_PORTAL = createSimple(Blocks.END_PORTAL); public static final Block END_GATEWAY = new VirtualEndGatewayBlock(AbstractBlock.Settings.of(Material.PORTAL).strength(100).noCollision()); @@ -53,56 +56,66 @@ public class NEBlocks { public static final Block GOLD_LAUNCH_PAD = new LaunchPadBlock(AbstractBlock.Settings.copy(Blocks.LIGHT_WEIGHTED_PRESSURE_PLATE).strength(100).noCollision(), Blocks.LIGHT_WEIGHTED_PRESSURE_PLATE); public static final Block IRON_LAUNCH_PAD = new LaunchPadBlock(AbstractBlock.Settings.copy(Blocks.HEAVY_WEIGHTED_PRESSURE_PLATE).strength(100).noCollision(), Blocks.HEAVY_WEIGHTED_PRESSURE_PLATE); + public static final Block CONTRIBUTOR_STATUE = new ContributorStatueBlock(AbstractBlock.Settings.copy(Blocks.SMOOTH_STONE).strength(100)); + public static final Block INFINITE_DISPENSER = new InfiniteDispenserBlock(AbstractBlock.Settings.copy(Blocks.DISPENSER).strength(100)); public static final Block INFINITE_DROPPER = new InfiniteDropperBlock(AbstractBlock.Settings.copy(Blocks.DROPPER).strength(100)); public static final Block SNAKE_BLOCK = new SnakeBlock(AbstractBlock.Settings.copy(Blocks.LIME_CONCRETE).strength(100), Blocks.LIME_CONCRETE, 8, 7); public static final Block FAST_SNAKE_BLOCK = new SnakeBlock(AbstractBlock.Settings.copy(Blocks.LIGHT_BLUE_CONCRETE).strength(100), Blocks.LIGHT_BLUE_CONCRETE, 4, 7); - public static final Block TINY_POTATO = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTYwNjIyODAxMzY0NCwKICAicHJvZmlsZUlkIiA6ICJiMGQ0YjI4YmMxZDc0ODg5YWYwZTg2NjFjZWU5NmFhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaW5lU2tpbl9vcmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTczNTE0YTIzMjQ1ZjE1ZGJhZDVmYjRlNjIyMTYzMDIwODY0Y2NlNGMxNWQ1NmRlM2FkYjkwZmE1YTcxMzdmZCIKICAgIH0KICB9Cn0="); - public static final Block IRRITATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTYwNjI5MzE0MjMyNywKICAicHJvZmlsZUlkIiA6ICI3NTE0NDQ4MTkxZTY0NTQ2OGM5NzM5YTZlMzk1N2JlYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGFua3NNb2phbmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTRiMmNiZmUxZmQ0ZDMxMjM0NjEwODFhZDQ2MGFjYjZjMDM0NWJlZDNmM2NlOTZkNDc1YjVmNThmN2I5MDMwYiIKICAgIH0KICB9Cn0="); - public static final Block SAD_TATER = createTaterBlock(ParticleTypes.FALLING_WATER, "ewogICJ0aW1lc3RhbXAiIDogMTYxMDU1MjI2MjU3MiwKICAicHJvZmlsZUlkIiA6ICJhYTZhNDA5NjU4YTk0MDIwYmU3OGQwN2JkMzVlNTg5MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJiejE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzc5MTVmNWFiNmEzYWY1ZmQ4ZTA0M2JjOThhNTQ2NmFjZmM1ZDU3YzMwZGM5YTFkMmU0YTMyZjdiZmExZDM1YmYiCiAgICB9CiAgfQp9"); - public static final Block FLOWERING_AZALEA_TATER = createTaterBlock(Blocks.FLOWERING_AZALEA_LEAVES, "ewogICJ0aW1lc3RhbXAiIDogMTYyODI3NzEwNDAyNCwKICAicHJvZmlsZUlkIiA6ICI4YmM3MjdlYThjZjA0YWUzYTI4MDVhY2YzNjRjMmQyNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJub3RpbnZlbnRpdmUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWI2YzA1ZDNiZTkzNjljNjk5ODQ1MTNmMjgxOTMyNjIyYmNhODA3MDA4ZGVmOTk3MjIyYTZkNGY4Y2I3MWQ4MyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); - public static final Block STONE_TATER = createTaterBlock(Blocks.STONE, "ewogICJ0aW1lc3RhbXAiIDogMTYzNzQyMzM5Mjc4NSwKICAicHJvZmlsZUlkIiA6ICIzNDkxZjJiOTdjMDE0MWE2OTM2YjFjMjJhMmEwMGZiNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZXNzc3N1aGgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjJlNTYwMTNhNWY2Mzk5YjVmYjkxYmI2MjBkYzI0MGJiMDRlYjdkMWQ3MWUwODExODUzMDU4YjZkNWVkNjI5MSIKICAgIH0KICB9Cn0="); - public static final Block CALCITE_TATER = createTaterBlock(Blocks.CALCITE, "ewogICJ0aW1lc3RhbXAiIDogMTYzNzgyMzAxNzA0NywKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWQ4ZDIyMTViNTYwYzY3NTVhMTIyNGQzMzA0MTgxNGM1ZWRlOTYzOGNjYjQ4MGE5MmJhZjc5MzkwMDgwZTY4NyIKICAgIH0KICB9Cn0="); - public static final Block TUFF_TATER = createTaterBlock(Blocks.TUFF, "ewogICJ0aW1lc3RhbXAiIDogMTYzNzg1ODQ0MTg4OSwKICAicHJvZmlsZUlkIiA6ICI5MWYwNGZlOTBmMzY0M2I1OGYyMGUzMzc1Zjg2ZDM5ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTdG9ybVN0b3JteSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84NjEyYTlkZmJlMTkwNjExM2M4ZmY4MGJhNzI0YWYxZGNmOGFkNjhmOTVjZjE1ZjhhMjk5MzFiODJkYjViYWRhIgogICAgfQogIH0KfQ=="); - public static final Block BASALT_TATER = createTaterBlock(ParticleTypes.WHITE_ASH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM5Nzk3NTU4NiwKICAicHJvZmlsZUlkIiA6ICI2OTBkMDM2OGM2NTE0OGM5ODZjMzEwN2FjMmRjNjFlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ5emZyXzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzMwMzhkZmJhNWZjNjg3Nzg5MWQ1YTZjOTA0ZjNlOTBjNWNlOGQ3NmI2MzAzMTRhMWI4NTFiM2Q2N2U3OWZlYSIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); - public static final Block DRIPSTONE_TATER = createTaterBlock(Blocks.DRIPSTONE_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTYzODU1MTU1NjQzMCwKICAicHJvZmlsZUlkIiA6ICJjNmE2N2QwMmY4MGM0MjhmODYyNmQ5MjhlOTNjN2FjNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJHaW92YW5uaVdpamF5YSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85MDZlYThkY2UxMTYyZTQ2MzUzZDkzNjlmYjkzMTNlOGVjMmE2M2U2NGVhYTYxN2IwMmZlNWYzOTA3M2QwNmQ4IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block AMETHYST_TATER = createTaterBlock(Blocks.AMETHYST_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDg5Nzg2ODM4OSwKICAicHJvZmlsZUlkIiA6ICI4MmM2MDZjNWM2NTI0Yjc5OGI5MWExMmQzYTYxNjk3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3ROb3RvcmlvdXNOZW1vIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2EwOTcyZGJmNzEwNjdjMTdhMDFhNjEzMDU4NmE4ZjBhZjgwYjI2N2M0YzFjNzQwN2VlZTA1OTIxNGEwMmRhNTgiCiAgICB9CiAgfQp9"); - public static final Block PACKED_ICE_TATER = createTaterBlock(Blocks.PACKED_ICE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTI4NzQ0OTg4MiwKICAicHJvZmlsZUlkIiA6ICIzNmMxODk4ZjlhZGE0NjZlYjk0ZDFmZWFmMjQ0MTkxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJMdW5haWFuIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzVlZTQxZjRiYmMzODgxNWI0OTdhYjBiZmYxYTk4MWE3Y2QyMTIxYjUzOTY2MTY2MmRmNGYyODUxNTAwNzM3ZTMiCiAgICB9CiAgfQp9"); - public static final Block BLUE_ICE_TATER = createTaterBlock(Blocks.BLUE_ICE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMyMjI5NTMxNiwKICAicHJvZmlsZUlkIiA6ICJjNTBhZmE4YWJlYjk0ZTQ1OTRiZjFiNDI1YTk4MGYwMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUd29FQmFlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2ZiMDBlYzZjYjE5Mjg0NDhmZDcyYWRkNDM1MjY0M2E3ZDA0ZGMxZmI1NGNiYjM3ZDgwOTQ4NDRhODQ2NDY4MzAiCiAgICB9CiAgfQp9"); - public static final Block FLAME_TATER = createTaterBlock(ParticleTypes.FLAME, "ewogICJ0aW1lc3RhbXAiIDogMTYzNzc4NjIwMTYxMSwKICAicHJvZmlsZUlkIiA6ICJmMTA0NzMxZjljYTU0NmI0OTkzNjM4NTlkZWY5N2NjNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJ6aWFkODciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTY5YTBlNjFiMWViZjAzYTIzYTZlNTg4NWQxMzNjMDA1NWY3NzU1YzNiNjNlM2ZiMmFjNDc1YWFmNGQ4NzQ2NyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); - public static final Block PUZZLE_CUBE_TATER = createTaterBlock(ParticleTypes.FIREWORK, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTIzNDI4NjY1MiwKICAicHJvZmlsZUlkIiA6ICIzOWEzOTMzZWE4MjU0OGU3ODQwNzQ1YzBjNGY3MjU2ZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkZW1pbmVjcmFmdGVybG9sIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzQxZjhkYTVjMzQyZTc5OWJmYWUxNTRjMTY2MjdiNjE5MDkyM2VhZTI3NzM1ZWY3ZmZiZGViMWExMjFjODgxMWIiCiAgICB9CiAgfQp9"); - public static final Block LUCKY_TATER = createLuckyTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3ODg4ODg0NSwKICAicHJvZmlsZUlkIiA6ICJiYjdjY2E3MTA0MzQ0NDEyOGQzMDg5ZTEzYmRmYWI1OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJsYXVyZW5jaW8zMDMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzQxNzU5OGY4ZDMwZGQzNTgyY2U3MjNhMTMwM2FiZWVjYTlhYzZhOTY0Mzg5NjdiN2Y0YzA0M2ZlMzU2MmViYiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9", "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3ODg1OTgxMSwKICAicHJvZmlsZUlkIiA6ICJhOGJhMGY1YTFmNjQ0MTgzODZkZGI3OWExZmY5ZWRlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJDcmVlcGVyOTA3NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hNTkwYzVkN2QwNWNkNGFkMTc0N2I3YjRlMjY1ZGM5N2EwN2IwNTQxNzVlMWYyNWI0ODhjMmRlMDIxMDc1MzI5IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block CRATE_TATER = createTaterBlock(ParticleTypes.WAX_ON, "ewogICJ0aW1lc3RhbXAiIDogMTYzODkwODYyNjk0NywKICAicHJvZmlsZUlkIiA6ICJiYzRlZGZiNWYzNmM0OGE3YWM5ZjFhMzlkYzIzZjRmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICI4YWNhNjgwYjIyNDYxMzQwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzViN2QzNGYxNmVmOWEzNjE5NjRjZTc0MDViNmI0NjNmNjBjYzIxNGJkYjYyNWUwODk4NjljNTBmNTMzMmY2MWUiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="); - public static final Block TATER_OF_UNDYING = createTaterBlock(ParticleTypes.TOTEM_OF_UNDYING, "ewogICJ0aW1lc3RhbXAiIDogMTYzNzg2MDQ4MDI5NCwKICAicHJvZmlsZUlkIiA6ICI3NTE0NDQ4MTkxZTY0NTQ2OGM5NzM5YTZlMzk1N2JlYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGFua3NNb2phbmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjUyNmQ5MzE0NzgyNWUyZGI0NDRhYWY0YTk0NjRiNjFhZDRlNGRlZmIwYWRmOTQ0YTIyNzU1NDNlZmM5MTkyYSIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); - public static final Block CRYING_OBSIDIAN_TATER = createTaterBlock(ParticleTypes.DRIPPING_OBSIDIAN_TEAR, "ewogICJ0aW1lc3RhbXAiIDogMTYzODg4MzgyNzAwNiwKICAicHJvZmlsZUlkIiA6ICI5N2ViMDJkMWY5YmI0NjUwYmNmNzE2MTEzYjUzYjY4ZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJTQmNhY3R1cyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MGQxNTFhMmRhODNiNGEwZWM3M2JlMDhhNDJjNGJjODk2NGZmMWQzYWUyMTA2Y2MyOWI5Yjc5Y2ZjY2I4YjlmIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block FLIPPED_TATER = createTaterBlock(ParticleTypes.DAMAGE_INDICATOR, "ewogICJ0aW1lc3RhbXAiIDogMTYxMDU1MjM5MTA3NywKICAicHJvZmlsZUlkIiA6ICI5MThhMDI5NTU5ZGQ0Y2U2YjE2ZjdhNWQ1M2VmYjQxMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCZWV2ZWxvcGVyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzljMWUzM2M0YjdlNmNiNThlNjk5YWViN2FlNDEyMzI5ZjM1Y2I0NDNlNTA3NDNjODg5NmVkMzZkZmI2YTM1ODgiCiAgICB9CiAgfQp9"); - public static final Block SANTA_HAT_TATER = createTaterBlock(ParticleTypes.SNOWFLAKE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDM3ODMyNzU2NywKICAicHJvZmlsZUlkIiA6ICJlMmVkYTM1YjMzZGU0M2UxOTVhZmRkNDgxNzQ4ZDlhOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDaGFsa19SaWNlR0kiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzYwOWYzNTEwYjI5YmZhMTUwNGI3ZDNkNTNmNDY2ZTc2MjhhMWNlYmQxMDI1NzM2MDFkYjMzZTFjZWQ4OGM0ZSIKICAgIH0KICB9Cn0="); - - public static final Block SKELETATER = createTaterBlock(Blocks.BONE_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDcwMTgxODU1NCwKICAicHJvZmlsZUlkIiA6ICIzNmMxODk4ZjlhZGE0NjZlYjk0ZDFmZWFmMjQ0MTkxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJMdW5haWFuIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Y0NzJlMmZjMzZjN2Q4ZWY3Y2ZmOGNmYmE3MWU3ZTIzOGY4OWRlMDFlOGQ0NGMyMTcwM2YxYWM2ZDJjNDdmMSIKICAgIH0KICB9Cn0="); - public static final Block WITHER_SKELETATER = createTaterBlock(Blocks.SOUL_SAND, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDcwMTkwMjk4NywKICAicHJvZmlsZUlkIiA6ICJjNjEwOTExMDhlOTQ0MWRhODQyZDA5MDVmMDAyOWVhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkZVlvbm8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM3MzllMDNhYWY5OGYxZTk3MmUyMzEyMjQyM2Y4MjE2NGJjZWFkY2UzOTIyMWZhN2Y2OTA5ZDkwZWIwNTIyMyIKICAgIH0KICB9Cn0="); - public static final Block ZOMBIE_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDcwMTk0MDEwNSwKICAicHJvZmlsZUlkIiA6ICJjZGM5MzQ0NDAzODM0ZDdkYmRmOWUyMmVjZmM5MzBiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXdMb2JzdGVycyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85NDk1ZDZhYTVlZjE4NTA2MmU4ZDlkMWJhMTcyMWQ1MTQ0ZTI0MTU1MjQ0ZjUzZWE0MTI5MDM4Zjk3N2EwNzM1IgogICAgfQogIH0KfQ=="); - public static final Block CREEPER_TATER = createTaterBlock(ParticleTypes.EXPLOSION, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDcwMjA3NjA5MiwKICAicHJvZmlsZUlkIiA6ICI0ZDEzZWUyZjViOWI0N2I2OGU2NzhhMjAxN2VmZTc1MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJCcmF5ZGVyZWsiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODE0MjhiMTg2N2ExYjI1Y2ZjZTI0YWU4MjE5ODY2NTNiMWViOWRjMjUzNjMwYWI4MmI2OTVjMmNiYjZkMWU1MiIKICAgIH0KICB9Cn0=", 10); - public static final Block STEVE_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDcwMjE3MDM2MCwKICAicHJvZmlsZUlkIiA6ICIxNzhmMTJkYWMzNTQ0ZjRhYjExNzkyZDc1MDkzY2JmYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzaWxlbnRkZXRydWN0aW9uIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NlN2NjMDViZWU5OTNjZDcwMWE3NDI0MTViMDkxNTYzODFhNTRhYWE3YWQ1OTcxOTQxNzIyZTMyZGQ2ZWYzZjIiCiAgICB9CiAgfQp9"); - public static final Block ALEX_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDcwMjE5Mzc5MCwKICAicHJvZmlsZUlkIiA6ICI0NDAzZGM1NDc1YmM0YjE1YTU0OGNmZGE2YjBlYjdkOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJQWFkxIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2UxZjdkYzkwOWIyZDZjNjc5ZmZiNGM2OWM4ZDdjOGVkMzljZjQ3YTgzMzMwMTEzZjhmZTQ1YWM0YjBhNDgzYzgiCiAgICB9CiAgfQp9"); + public static final Block NUCLE_PAST_LOGO = createTaterBlock(new DustParticleEffect(Vec3d.unpackRgb(0x52C471).toVector3f(), 1), "65ed3e4d6ec42bd84d2b5e452087d454aac141a978540f6d200bd8aa863d4db8"); + + public static final Block TINY_POTATO = createTaterBlock(ParticleTypes.HEART, "573514a23245f15dbad5fb4e622163020864cce4c15d56de3adb90fa5a7137fd"); + public static final Block BOTANICAL_TINY_POTATO = createBotanicTaterBlock(ParticleTypes.HEART, + "39e878c52870c640b5985c67df70059120b61b26c77a5cf86042c04c13477d7b", + "582f367eabffc9ecd8ab870c9f5f5c8b43215d5eb922cfb193aed70fcf694e92" + ); + public static final Block IRRITATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "14b2cbfe1fd4d3123461081ad460acb6c0345bed3f3ce96d475b5f58f7b9030b"); + public static final Block SAD_TATER = createTaterBlock(ParticleTypes.FALLING_WATER, "7915f5ab6a3af5fd8e043bc98a5466acfc5d57c30dc9a1d2e4a32f7bfa1d35bf"); + public static final Block FLOWERING_AZALEA_TATER = createTaterBlock(Blocks.FLOWERING_AZALEA_LEAVES, "ab6c05d3be9369c69984513f281932622bca807008def997222a6d4f8cb71d83"); + public static final Block STONE_TATER = createTaterBlock(Blocks.STONE, "62e56013a5f6399b5fb91bb620dc240bb04eb7d1d71e0811853058b6d5ed6291"); + public static final Block CALCITE_TATER = createTaterBlock(Blocks.CALCITE, "ed8d2215b560c6755a1224d33041814c5ede9638ccb480a92baf79390080e687"); + public static final Block TUFF_TATER = createTaterBlock(Blocks.TUFF, "8612a9dfbe1906113c8ff80ba724af1dcf8ad68f95cf15f8a29931b82db5bada"); + public static final Block BASALT_TATER = createTaterBlock(ParticleTypes.WHITE_ASH, "c3038dfba5fc6877891d5a6c904f3e90c5ce8d76b630314a1b851b3d67e79fea"); + public static final Block DRIPSTONE_TATER = createTaterBlock(Blocks.DRIPSTONE_BLOCK, "906ea8dce1162e46353d9369fb9313e8ec2a63e64eaa617b02fe5f39073d06d8"); + public static final Block AMETHYST_TATER = createTaterBlock(Blocks.AMETHYST_BLOCK, "a0972dbf71067c17a01a6130586a8f0af80b267c4c1c7407eee059214a02da58"); + public static final Block PACKED_ICE_TATER = createTaterBlock(Blocks.PACKED_ICE, "5ee41f4bbc38815b497ab0bff1a981a7cd2121b539661662df4f2851500737e3"); + public static final Block BLUE_ICE_TATER = createTaterBlock(Blocks.BLUE_ICE, "fb00ec6cb1928448fd72add4352643a7d04dc1fb54cbb37d8094844a84646830"); + public static final Block FLAME_TATER = createTaterBlock(ParticleTypes.FLAME, "969a0e61b1ebf03a23a6e5885d133c0055f7755c3b63e3fb2ac475aaf4d87467"); + public static final Block PUZZLE_CUBE_TATER = createTaterBlock(ParticleTypes.FIREWORK, "41f8da5c342e799bfae154c16627b6190923eae27735ef7ffbdeb1a121c8811b"); + public static final Block LUCKY_TATER = createLuckyTaterBlock("7417598f8d30dd3582ce723a1303abeeca9ac6a96438967b7f4c043fe3562ebb", "a590c5d7d05cd4ad1747b7b4e265dc97a07b054175e1f25b488c2de021075329"); + public static final Block CRATE_TATER = createTaterBlock(ParticleTypes.WAX_ON, "5b7d34f16ef9a361964ce7405b6b463f60cc214bdb625e089869c50f5332f61e"); + public static final Block TATER_OF_UNDYING = createTaterBlock(ParticleTypes.TOTEM_OF_UNDYING, "b526d93147825e2db444aaf4a9464b61ad4e4defb0adf944a2275543efc9192a"); + public static final Block CRYING_OBSIDIAN_TATER = createTaterBlock(ParticleTypes.DRIPPING_OBSIDIAN_TEAR, "70d151a2da83b4a0ec73be08a42c4bc8964ff1d3ae2106cc29b9b79cfccb8b9f"); + public static final Block FLIPPED_TATER = createTaterBlock(ParticleTypes.DAMAGE_INDICATOR, "9c1e33c4b7e6cb58e699aeb7ae412329f35cb443e50743c8896ed36dfb6a3588"); + public static final Block BACKWARD_TATER = createTaterBlock(ParticleTypes.HEART, "c3d2eefca5fa2e0cc710fe067f4a7114df0f430eeaaa1d9c373e4c91c9ed0ea4"); + public static final Block UPWARD_TATER = createTaterBlock(ParticleTypes.HEART, "60860143fea936066220eae3a31cdfe5aa9b4e525e194aa965c02272a01cb5c8"); + public static final Block SANTA_HAT_TATER = createTaterBlock(ParticleTypes.SNOWFLAKE, "7609f3510b29bfa1504b7d3d53f466e7628a1cebd102573601db33e1ced88c4e"); + + public static final Block SKELETATER = createTaterBlock(Blocks.BONE_BLOCK, "f472e2fc36c7d8ef7cff8cfba71e7e238f89de01e8d44c21703f1ac6d2c47f1"); + public static final Block WITHER_SKELETATER = createTaterBlock(Blocks.SOUL_SAND, "2c739e03aaf98f1e972e23122423f82164bceadce39221fa7f6909d90eb05223"); + public static final Block ZOMBIE_TATER = createTaterBlock(Items.ROTTEN_FLESH, "9495d6aa5ef185062e8d9d1ba1721d5144e24155244f53ea4129038f977a0735"); + public static final Block CREEPER_TATER = createTaterBlock(ParticleTypes.EXPLOSION, "81428b1867a1b25cfce24ae821986653b1eb9dc253630ab82b695c2cbb6d1e52", 10); + public static final Block STEVE_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ce7cc05bee993cd701a742415b09156381a54aaa7ad5971941722e32dd6ef3f2"); + public static final Block ALEX_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "e1f7dc909b2d6c679ffb4c69c8d7c8ed39cf47a83330113f8fe45ac4b0a483c8"); public static final Block TRANS_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xEE90AD).toVector3f(), // pink Vec3d.unpackRgb(0x3CB0DA).toVector3f(), // blue Vec3d.unpackRgb(0xCFD5D6).toVector3f(), // white - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQxMjI4NzMzOCwKICAicHJvZmlsZUlkIiA6ICJiN2ZkYmU2N2NkMDA0NjgzYjlmYTllM2UxNzczODI1NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Y3N2RiYzgwOWIyNTQ0NDkwMjNmYWMwZGQ0ZTBkOTEwMGI1YzQ0MDc3NDhiZTA4OWYwZTAwYzdlZjdhYjc2NCIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); + }, "f77dbc809b254449023fac0dd4e0d9100b5c4407748be089f0e00c7ef7ab764"); public static final Block ASEXUAL_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0x16161B).toVector3f(), // black Vec3d.unpackRgb(0x3F4548).toVector3f(), // gray Vec3d.unpackRgb(0xCFD5D6).toVector3f(), // white Vec3d.unpackRgb(0x7B2BAD).toVector3f(), // purple - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQ0NTY2NzYxMCwKICAicHJvZmlsZUlkIiA6ICJmODJmNTQ1MDIzZDA0MTFkYmVlYzU4YWI4Y2JlMTNjNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZXNwb25kZW50cyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zOTAyODg3ZGM1NWQ0ZjczNmQwYjU2NmFkODEyZjI1NjExM2FhYTRhMzE4ZmZiODY1NjIzZmI1YTY3N2FlZjMyIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); + }, "3902887dc55d4f736d0b566ad812f256113aaa4a318ffb865623fb5a677aef32"); public static final Block BI_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xBE46B5).toVector3f(), // pink Vec3d.unpackRgb(0x7B2BAD).toVector3f(), // purple Vec3d.unpackRgb(0x353A9E).toVector3f(), // blue - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQ0NjEyNzQzOCwKICAicHJvZmlsZUlkIiA6ICIxNzhmMTJkYWMzNTQ0ZjRhYjExNzkyZDc1MDkzY2JmYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzaWxlbnRkZXRydWN0aW9uIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzQ1MjZhNzJjYTViZTQyOTIwY2QzMTAyODBjMDNlMmM5ZTlhNzBjNTVhYTljYzFhMGM0ODM5NmQ1NTZmMWM3NWQiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="); + }, "4526a72ca5be42920cd310280c03e2c9e9a70c55aa9cc1a0c48396d556f1c75d"); public static final Block GAY_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xA12823).toVector3f(), // red Vec3d.unpackRgb(0xF17716).toVector3f(), // orange @@ -110,287 +123,294 @@ public class NEBlocks { Vec3d.unpackRgb(0x556E1C).toVector3f(), // green Vec3d.unpackRgb(0x353A9E).toVector3f(), // blue Vec3d.unpackRgb(0x7B2BAD).toVector3f(), // purple - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQ0NjM3NjgwOCwKICAicHJvZmlsZUlkIiA6ICIzZjM4YmViZGYwMWQ0MjNkYWI4MjczZjUwNGFiNGEyNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJjazM0Nzk0MjM1NzUzNzMxIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Y5ZjQ0NmYyOTM5NmZmNDQ0ZDBlZjRmNTNhNzBjMjhhZmI2OWU1ZDFkYTAzN2MwM2MyNzdkMjM5MTdkYWNkZWQiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="); + }, "f9f446f29396ff444d0ef4f53a70c28afb69e5d1da037c03c277d23917dacded"); public static final Block LESBIAN_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xA12823).toVector3f(), // red Vec3d.unpackRgb(0xF17716).toVector3f(), // orange Vec3d.unpackRgb(0xEAEDED).toVector3f(), // white Vec3d.unpackRgb(0xEE90AD).toVector3f(), // pink Vec3d.unpackRgb(0xBE46B5).toVector3f(), // magenta - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQ0NjU4MjIyMSwKICAicHJvZmlsZUlkIiA6ICJiNjM2OWQ0MzMwNTU0NGIzOWE5OTBhODYyNWY5MmEwNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJCb2JpbmhvXyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS80NDQ5Mjc0MGY0MGMxOWMzZTUyODcxY2RmNmNiZDU4NWU5ODBmYzdiNTBjYjBmYzk0OWJmYmU0NDAzMmE3ZGI3IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); + }, "44492740f40c19c3e52871cdf6cbd585e980fc7b50cb0fc949bfbe44032a7db7"); public static final Block NONBINARY_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xF9C629).toVector3f(), // yellow Vec3d.unpackRgb(0x16161B).toVector3f(), // black Vec3d.unpackRgb(0xCFD5D6).toVector3f(), // white Vec3d.unpackRgb(0x7B2BAD).toVector3f(), // purple - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQ0NzAyNjQwNiwKICAicHJvZmlsZUlkIiA6ICJjNjEwOTExMDhlOTQ0MWRhODQyZDA5MDVmMDAyOWVhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkZVlvbm8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTA4NTRlNDczYmM3YTBhNjk1NmNiMTJkZjgwMjZkZTlmYzAwZmFlNDBjMDUwMmEzMTgyOTA4YmJiNTBjOWFhNSIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); + }, "10854e473bc7a0a6956cb12df8026de9fc00fae40c0502a3182908bbb50c9aa5"); public static final Block PAN_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xFA318C).toVector3f(), // pink Vec3d.unpackRgb(0xFDD73B).toVector3f(), // yellow Vec3d.unpackRgb(0x2394F9).toVector3f(), // blue - }, "ewogICJ0aW1lc3RhbXAiIDogMTYzOTQ0NzE2NDMzOSwKICAicHJvZmlsZUlkIiA6ICJhYzYxZjQwZGJhNDE0YzkwOWU0NWJkMTgwMmY5MTYxYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbmlmYW5pIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNmNzYxYmUxOGYwNzBhMDE2ZTRmNjFkMzdlYzEzYjIzMDMyYTU1MmRjZGI3MGE2N2Y4NTVjM2FiMmZhZTU0ZTAiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="); + }, "3f761be18f070a016e4f61d37ec13b23032a552dcdb70a67f855c3ab2fae54e0"); public static final Block GENDERFLUID_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0xBE46B5).toVector3f(), // pink Vec3d.unpackRgb(0xCFD5D6).toVector3f(), // white Vec3d.unpackRgb(0x7B2BAD).toVector3f(), // purple Vec3d.unpackRgb(0x16161B).toVector3f(), // black Vec3d.unpackRgb(0x2394F9).toVector3f(), // blue - }, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDYxOTIxMjYyMCwKICAicHJvZmlsZUlkIiA6ICJiNzQ3OWJhZTI5YzQ0YjIzYmE1NjI4MzM3OGYwZTNjNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJTeWxlZXgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmEwNjZjZGQ4ZDQ4NTAxZWI1MWVlYTFlM2U0MTdjMjVlZjUxYTA0Mjg0NzE0YmFhZDVhYjVkZTVjZDQyMjFiOCIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); + }, "ba066cdd8d48501eb51eea1e3e417c25ef51a04284714baad5ab5de5cd4221b8"); public static final Block DEMISEXUAL_TATER = createColorPatternTaterBlock(new Vector3f[]{ Vec3d.unpackRgb(0x16161B).toVector3f(), // black Vec3d.unpackRgb(0xCFD5D6).toVector3f(), // white Vec3d.unpackRgb(0x7B2BAD).toVector3f(), // purple Vec3d.unpackRgb(0x3F4548).toVector3f(), // gray - }, "ewogICJ0aW1lc3RhbXAiIDogMTY0MDYyMDQyODY1MiwKICAicHJvZmlsZUlkIiA6ICJmODJmNTQ1MDIzZDA0MTFkYmVlYzU4YWI4Y2JlMTNjNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZXNwb25kZW50cyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zMmI3Y2QyYzVkNzBjYWI0NzZjZTk1MWUyYzUyMGM5YjM1NzkyNTBhZDkwMDE2NGQ2YzIzMjFjN2Y0M2Q2ZGM3IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); + }, "32b7cd2c5d70cab476ce951e2c520c9b3579250ad900164d6c2321c7f43d6dc7"); - public static final Block WARDEN_TATER = createWardenTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MDgxMTgxMjYwNCwKICAicHJvZmlsZUlkIiA6ICJkODAwZDI4MDlmNTE0ZjkxODk4YTU4MWYzODE0Yzc5OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJ0aGVCTFJ4eCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81MmU0MTFhYTE1MDFjNzJkOTlkNzM4Y2IzOGUyNTBhMzk1YzY2MDRiOGJjY2M5ZjI5ZDdmMjZlOWNhY2Q4ZDZmIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block VIRAL_TATER = createTaterBlock(ParticleTypes.SCRAPE, "ewogICJ0aW1lc3RhbXAiIDogMTY2MjEyODQxMTQ5NCwKICAicHJvZmlsZUlkIiA6ICIyNDEzZGZhMzk0NGQ0NDZhYTFiZjY3N2YwOThiNzhlZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBenp6dXJhIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2IxMmY3NzBjNDU0MmM5ZjI2YmEwM2FhZWU2ODZlMDk0NjY5OGQzOTRhOGU3NDVkM2VhYzYwMTMzODNkY2ZmMjkiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ"); + public static final Block WARDEN_TATER = createWardenTaterBlock("52e411aa1501c72d99d738cb38e250a395c6604b8bccc9f29d7f26e9cacd8d6f"); + public static final Block VIRAL_TATER = createTaterBlock(ParticleTypes.SCRAPE, "b12f770c4542c9f26ba03aaee686e0946698d394a8e745d3eac6013383dcff29"); public static final Block DICE_TATER = createDiceTaterBlock(); - public static final Block TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_BELL, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDQ5MjYzNjAzNiwKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84ZDUzMWQ0MGQwOWVmZDNhOWE1ODViNTVlNjZhOWE2ZjA0YzczYWY4NGQ5NGQ3YzU2NTU0OWJmMjdiOGIyNmJkIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block RED_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_GUITAR, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDU2OTEyODY5NywKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yYmU1MWIyMjczNjBhYjY1Nzc2NzI1YTkxY2RlZDg0YjU2ZjY5MjBlZWMwZDZmYjVhNTdkNWYxYWRhMTQ3YWE2IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block ORANGE_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDU2ODAyNDE5NiwKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jNTM2MmUzMDg4MjJjZjFjNDM2YTRiYTZkMGMzOTc2MTM5Yzk4NjIxYzdhYTJhOTZiZTk5YzczZTk3NzA4ZWZjIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block YELLOW_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_CHIME, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDU2OTUwNTAwNywKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9mZWY3NGE2YzdjYjQ1ZDNjNGJhZTEzNGU2ZWM0MWZkNzUxN2Y3ZWFiZTJjNzRkYzc2YTUxYjM5YzYzYzM4YmMyIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block GREEN_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_BIT, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDU2ODA2NjM4OCwKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81N2JiNjkyNDk5NTYwZjAzOTMzMTRhOWYxZWMxMTQyNWIzNjBlNDNjMWRkYjU2MGRlMjYxY2QwNGI4Y2M4ZTY5IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block BLUE_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_XYLOPHONE, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDU2Nzk1MDEyMCwKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84OWFkNWFlY2ZiOWFiNmYzNjI2MWUwYzQ2MmFjZWNmMjA3OGU3ZTU3NWQ5MzczYmFjYzA1MDMyMjRjNDQyNTBlIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - public static final Block PURPLE_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_FLUTE, "ewogICJ0aW1lc3RhbXAiIDogMTYzNDU3NjYzMTAwMiwKICAicHJvZmlsZUlkIiA6ICI2MDBjMDE4YmM4ZmM0NGQ1YWJkYjUyODc5ZGUyY2Q0MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJzb2NrZnJpZW5kcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kMTZhMzc1MTJjYjdjYTM3MmFmNWYzN2Y5YmQ5NWQ0NjAzYzRmYTQ0YmU0MTQzZmIyNmFhYTMyNGU2ODFjOWIwIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0="); - - public static final Block WHITE_TATER = createColorTaterBlock(DyeColor.WHITE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzI2Njg3OCwKICAicHJvZmlsZUlkIiA6ICJhYzYxZjQwZGJhNDE0YzkwOWU0NWJkMTgwMmY5MTYxYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbmlmYW5pIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzczZGFiMDUyZDMzZWU0NjdiYTdmYWM5YWEwZTMxNmRiOTYyZTNlN2FjNmRiYmZmMjM2NjY3NDM5ZTM0MDM5MmMiCiAgICB9CiAgfQp9"); - public static final Block ORANGE_TATER = createColorTaterBlock(DyeColor.ORANGE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzE4Nzk1MCwKICAicHJvZmlsZUlkIiA6ICJiN2ZkYmU2N2NkMDA0NjgzYjlmYTllM2UxNzczODI1NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzc1Yjg4MTI2ZGJkNGU4NjA2MDg5NjVjMDQ0ZDAwNjBhYzAzYzI2ZWJlYTFiNjUyNjQzZmUwMzczNGVhMWIxMmIiCiAgICB9CiAgfQp9"); - public static final Block MAGENTA_TATER = createColorTaterBlock(DyeColor.MAGENTA, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzE2OTQ5NiwKICAicHJvZmlsZUlkIiA6ICI1NjY3NWIyMjMyZjA0ZWUwODkxNzllOWM5MjA2Y2ZlOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVJbmRyYSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9iZWY0Y2Y0MGYwMmJjMTI5ZTM0ZjY2MGNlMzkyMzM4Nzg5NGI4ZjA4MTRmYzU4YzA5NzI2NjI5ZmE3YjFkYjY0IgogICAgfQogIH0KfQ=="); - public static final Block LIGHT_BLUE_TATER = createColorTaterBlock(DyeColor.LIGHT_BLUE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzExMzY0OCwKICAicHJvZmlsZUlkIiA6ICJjNzQ1Mzc4MDY5MzY0ODg2ODkwNzRkOTQ3ZjBlOTlmNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdWN1bWkwNyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9lNmY3ZTQ2NDFmYTRlZTRiYTkyNmViYWU0NjY5ZjIyZjI3NjA1MWIzNjI5ZjhkODljZTAxNWE5NWMxMTM3ZmIyIgogICAgfQogIH0KfQ=="); - public static final Block YELLOW_TATER = createColorTaterBlock(DyeColor.YELLOW, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzI4NTIxNiwKICAicHJvZmlsZUlkIiA6ICJjNzQ1Mzc4MDY5MzY0ODg2ODkwNzRkOTQ3ZjBlOTlmNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdWN1bWkwNyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81OTU2ZGYzZTg4ZjAxY2RkMjZkMWNhYTA3ZmFiNzIzYzNhM2RiMzE5YmExNjdhM2JlZDI4N2Q0NjE2MzVmMWI5IgogICAgfQogIH0KfQ=="); - public static final Block LIME_TATER = createColorTaterBlock(DyeColor.LIME, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzE0OTY4MywKICAicHJvZmlsZUlkIiA6ICIxNzhmMTJkYWMzNTQ0ZjRhYjExNzkyZDc1MDkzY2JmYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzaWxlbnRkZXRydWN0aW9uIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzE2NjcxZjRjN2NlOGU0NjA5OWYzNjdmYzA1YzViNjEwODljODg3ZjQxNDVhZmYyMDc3YTFhN2QzNjMxZGQwNjMiCiAgICB9CiAgfQp9"); - public static final Block PINK_TATER = createColorTaterBlock(DyeColor.PINK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzIwODA3OSwKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjNlZmViYmE0OTA2ZjlmMjYwYWFlODNmZWU3MzAxMjM3MDUyMTcyNmZhZGYwMTAxNDk4MTk3ZDcxNDNhNjRkZiIKICAgIH0KICB9Cn0="); - public static final Block GRAY_TATER = createColorTaterBlock(DyeColor.GRAY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzA3MzgxMywKICAicHJvZmlsZUlkIiA6ICIwYTUzMDU0MTM4YWI0YjIyOTVhMGNlZmJiMGU4MmFkYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJQX0hpc2lybyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83ZTQ5MWI2MjgyZWNhMTJjOWVkY2RkZmIzYmFmNmU1ZmIwNTQ5Yzg5ZDM5MDg4NTY3NDE1NjE2YzkyZGZkNWYwIgogICAgfQogIH0KfQ=="); - public static final Block LIGHT_GRAY_TATER = createColorTaterBlock(DyeColor.LIGHT_GRAY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzEyNzY2NCwKICAicHJvZmlsZUlkIiA6ICIzOTVkZTJlYjVjNjU0ZmRkOWQ2NDAwY2JhNmNmNjFhNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzcGFyZXN0ZXZlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I1ZGY3M2NjMDI2MDQzZDA5YzU0Y2IxNWQwOTIzZTMxNDUwM2UxZDUxMzAyNmI1OWE1MzE3YjMxZGE0YzUyODkiCiAgICB9CiAgfQp9"); - public static final Block CYAN_TATER = createColorTaterBlock(DyeColor.CYAN, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzA1NTA0NiwKICAicHJvZmlsZUlkIiA6ICJjZGM5MzQ0NDAzODM0ZDdkYmRmOWUyMmVjZmM5MzBiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXdMb2JzdGVycyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS80ZWIzOTAzMjA1M2EzZjJlNWJkMWQxOWJmYWNkMjViNTI0YjE5Y2QwZTcwYTVhOTJhNjFhYzg4NDkwNGVjYjU0IgogICAgfQogIH0KfQ=="); - public static final Block PURPLE_TATER = createColorTaterBlock(DyeColor.PURPLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzIyNjMwNiwKICAicHJvZmlsZUlkIiA6ICI0Mzk0NGU5NWZiNjI0NmJiOGIyYmQ5NDZlNWY5YjhhMCIsCiAgInByb2ZpbGVOYW1lIiA6ICJCbGFja0NvdWxkIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2FiNjlmZmE2ODEzNTAwMWU4NzE0Yzc4NjE3ZTVhMWEwMTc3ODI3Y2JiZDg2NmViOTg0ZjUyNGYwMjNmODdmZTUiCiAgICB9CiAgfQp9"); - public static final Block BLUE_TATER = createColorTaterBlock(DyeColor.BLUE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzAxMTE0MCwKICAicHJvZmlsZUlkIiA6ICJkOWQyZTg3ZjI1M2Q0NGI3YmYxMDc3OTZhZGRmODI2ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJIYWNrR2lybCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82MThiZTcyZTk0MjkxZGUxY2MzZTNkMmUyZmE4YmJkNzk0MjJjZGNiMGNiNzBjZWRkZTdkYzljMWJiZWY1ZmI1IgogICAgfQogIH0KfQ=="); - public static final Block BROWN_TATER = createColorTaterBlock(DyeColor.BROWN, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzAzNzY1OCwKICAicHJvZmlsZUlkIiA6ICJlZThjNWMzMGY3NWU0N2QxOTBmOTllNjI5NDgyOGZjMSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTcGFya19QaGFudG9tIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2RmOTQyZjdjMjRmNGMxMDM1M2RhOTc0YTkzOGFkNzVmOWE3Y2NkY2EyMzJhOTlkZTg3MGM1NjkxZDc1ZmQ3MGMiCiAgICB9CiAgfQp9"); - public static final Block GREEN_TATER = createColorTaterBlock(DyeColor.GREEN, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzA5MjYwMiwKICAicHJvZmlsZUlkIiA6ICI4MmM2MDZjNWM2NTI0Yjc5OGI5MWExMmQzYTYxNjk3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3ROb3RvcmlvdXNOZW1vIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2ZhYjk4YTRjNjllODE3NzcxZmVjMTdjMDhjN2UwMzE5NTJjMDVhNTIwMTVkY2VjYjA5YzkzNTc2NzQ1YzcxZTIiCiAgICB9CiAgfQp9"); - public static final Block RED_TATER = createColorTaterBlock(DyeColor.RED, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNzI0Nzc3OSwKICAicHJvZmlsZUlkIiA6ICIwYTUzMDU0MTM4YWI0YjIyOTVhMGNlZmJiMGU4MmFkYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJQX0hpc2lybyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81MWU0YmY2ZjdhMDI5NTY3ZDU5OGZmZjczYzNjNzZlMGNkZWE5NTZhN2ZmZjVlYTcyNzllYTRiZjQwYzk2OGMyIgogICAgfQogIH0KfQ=="); - public static final Block BLACK_TATER = createColorTaterBlock(DyeColor.BLACK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTMwNjk4NTY5MCwKICAicHJvZmlsZUlkIiA6ICIzM2ViZDMyYmIzMzk0YWQ5YWM2NzBjOTZjNTQ5YmE3ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEYW5ub0JhbmFubm9YRCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81N2E3Y2FhNDRjZWRmZjkyNWQyM2NkNWQzZjYyYmMwNmU4M2QzNDg1NTUxZGNjNGY5ZGIyZGE3ZDlmOGE5Njk0IgogICAgfQogIH0KfQ=="); - - public static final Block COAL_TATER = createTaterBlock(Blocks.COAL_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTg3NzA1MywKICAicHJvZmlsZUlkIiA6ICIyNzZlMDQ2YjI0MDM0M2VkOTk2NmU0OTRlN2U2Y2IzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBRFJBTlM3MTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2ViMjVkM2Y4ZmNmNDg2NzNhZDBiMTcxZWEzNzE1NGI0M2Q1N2Y2YWIwNGQ4ZmZiNTQ2ZmM2MDZiODUwNWJmNCIKICAgIH0KICB9Cn0="); - public static final Block DIAMOND_TATER = createTaterBlock(Blocks.DIAMOND_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTkxNzgxNiwKICAicHJvZmlsZUlkIiA6ICIwODFiZTAxZmZlMmU0ODMyODI3MDIwMjBlNmI1M2ExNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJMeXJpY1BsYXRlMjUyNDIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTM5OWM5ZDU5OWUwZDlkYzZhNDgwZTg1ZjRkYmVjYzQ1YjMxODgxNDAyNjg5NWFjODE1MGZkMmUyZmEyNTk5ZSIKICAgIH0KICB9Cn0="); - public static final Block EMERALD_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NzY0MzY0NCwKICAicHJvZmlsZUlkIiA6ICI0NWY3YTJlNjE3ODE0YjJjODAwODM5MmRmN2IzNWY0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJfSnVzdERvSXQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2Q3NjczMGRmNzI2YjhlZTlkNzJhM2E0Nzg0NTdkMzEzNjI2MTMzZGUxZDc2YzI2Y2ZjNmFmOGU4MGU5YzQ3NiIKICAgIH0KICB9Cn0="); - public static final Block GOLD_TATER = createTaterBlock(Blocks.GOLD_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTk1OTE4OCwKICAicHJvZmlsZUlkIiA6ICJjMTNkYzkxZjg1YjA0ZWM4OGU2NDk5YzdjZDc4Zjk3MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJjcnlwdGljX2Zyb2dfIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzE4MGE3Y2M3MTE1M2I4OWE1MzZjMTQ4ZDJmMTAxMmQ2NzcyYTdkM2JhODMyMWY5MjJhNmRlNDY3NzNjMzVhZjkiCiAgICB9CiAgfQp9"); - public static final Block IRON_TATER = createTaterBlock(Blocks.IRON_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTk3NzI1MiwKICAicHJvZmlsZUlkIiA6ICJmMjc0YzRkNjI1MDQ0ZTQxOGVmYmYwNmM3NWIyMDIxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJIeXBpZ3NlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xNzQ4NThjOTc2ZjAyNzRlYmNlM2YzZmZjZWY2NTM2MDlmMjlkMzdlMGNjOWNhZDI1ZTU4Njg2NGI4MDZjYjIzIgogICAgfQogIH0KfQ=="); - public static final Block LAPIS_TATER = createTaterBlock(Blocks.LAPIS_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTk5NDQxNSwKICAicHJvZmlsZUlkIiA6ICI2OTBkMDM2OGM2NTE0OGM5ODZjMzEwN2FjMmRjNjFlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ5emZyXzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNThkNWNiZGE1YzUwNDZiZjBiMGYwZDQ0N2MyZmNjNWU0Njg3MDdiNmE0ODM3YzA4M2FmOGUxMDlhYmE5Y2UxYyIKICAgIH0KICB9Cn0="); - public static final Block NETHERITE_TATER = createTaterBlock(Blocks.NETHERITE_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NjAxMzkwMywKICAicHJvZmlsZUlkIiA6ICI4YjgyM2E1YmU0Njk0YjhiOTE0NmE5MWRhMjk4ZTViNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTZXBoaXRpcyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82NjRkY2U0ZmFkZThlNWYzNTIwMDFlZmY2OTAwZDlkNGIxNDI5MzVlYmVkMzAzMTA2NTM5ZjdhZDAxOTM2MjFmIgogICAgfQogIH0KfQ=="); - public static final Block QUARTZ_TATER = createTaterBlock(Blocks.QUARTZ_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NjA2MDEzNywKICAicHJvZmlsZUlkIiA6ICI4MmM2MDZjNWM2NTI0Yjc5OGI5MWExMmQzYTYxNjk3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3ROb3RvcmlvdXNOZW1vIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdlN2I0NTYxZDA5ZDFhNzI2ZmVjMzYwNzcwNmM5ZTNjNzdlOGZjOWI4YzdlOWMzNjM3Y2E4MGVhMGM4NmJlMjEiCiAgICB9CiAgfQp9"); - public static final Block REDSTONE_TATER = createRedstoneTaterBlock(new DustParticleEffect(DustParticleEffect.RED, 1), "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NjA4MzA3NSwKICAicHJvZmlsZUlkIiA6ICIzYTNmNzhkZmExZjQ0OTllYjE5NjlmYzlkOTEwZGYwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb19jcmVyYXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzQ3ZGQyNTM2ZjVhNWViMmJkYjFlYTQzODlkM2FmOGNhMmZkOWQ1ZDJjOTdjNjYwZmM1YmY0ZDk3MGM5NzRkZSIKICAgIH0KICB9Cn0="); - - public static final Block COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTg5NTAxMSwKICAicHJvZmlsZUlkIiA6ICI5ZDQyNWFiOGFmZjg0MGU1OWM3NzUzZjc5Mjg5YjMyZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJUb21wa2luNDIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTgyMDdjN2NmNDAwNzIyMjY5MTc1MGIwNzgzZDY5NTkyNjFkZGY3Mjk4MDQ4M2Y3YzlmY2Y5NmMyY2JhODViMSIKICAgIH0KICB9Cn0="); - public static final Block EXPOSED_COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NTkzNjk0MSwKICAicHJvZmlsZUlkIiA6ICJkMGI4MjE1OThmMTE0NzI1ODBmNmNiZTliOGUxYmU3MCIsCiAgInByb2ZpbGVOYW1lIiA6ICJqYmFydHl5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2JkNTAyMDA5MDY0M2VkYjVlYzI1ZDg3Y2IxZjQwOGFhZDRmNjAxOGVjNGJiZTgzZDI1YTAzMWVmMWU3MDVlNGQiCiAgICB9CiAgfQp9"); - public static final Block WEATHERED_COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NjEwMjc2NSwKICAicHJvZmlsZUlkIiA6ICI5MWYwNGZlOTBmMzY0M2I1OGYyMGUzMzc1Zjg2ZDM5ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTdG9ybVN0b3JteSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83ZDljNjFkNjgyNDE2NjdmOGU0NjJkMThhODRjMTQxM2NlM2RiMTNmOTMyMjM5MTIyMDFjMjEzMjdiNGFkYjI1IgogICAgfQogIH0KfQ=="); - public static final Block OXIDIZED_COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MTM4NjAzODMxMSwKICAicHJvZmlsZUlkIiA6ICJiNjc3NTgwYzExYmU0ZjNiODI1OGM0YjBkNzNhNzg0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJPZmZpY2lhbGx5SksiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzdlOTE3MmQwZWMyZDIwNTg4YmY1NTk2ZWE3OTQwM2UzZGEyNjk3NWNkYzViNmQwNjI0ZTMxODU3Nzc0Mjk4YyIKICAgIH0KICB9Cn0="); - - public static final Block CAKE_TATER = createTaterBlock(Blocks.CAKE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM3OTg3NzY4NywKICAicHJvZmlsZUlkIiA6ICJhYTZhNzUwNWVkYmU0NjNiYjk1NWYyMWY0MjNiYTM1NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJub3RhbmR5d2FyaG9sIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzZkNDZmZDU4ZmQ1NjZiYzBhOTBmOGJjOTIxZGFmMGQ5OTIwNTkxYTViMTUzZTY0YTgwYmI2ZDU0ZGZiNDE1YjkiCiAgICB9CiAgfQp9"); - public static final Block ENDERTATER = createTaterBlock(ParticleTypes.PORTAL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM3OTg5NjkzNSwKICAicHJvZmlsZUlkIiA6ICI0M2NmNWJkNjUyMDM0YzU5ODVjMDIwYWI3NDE0OGQxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJrYW1pbDQ0NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xZjRmNjg1NDdlYzBkMDRhMWE1YzUyY2U4YmI4NDg0N2NkMDc2NzRkNTBjZjA3NDBiZjZmOWM1MDU4MjY4OTJkIgogICAgfQogIH0KfQ=="); - public static final Block FURNACE_TATER = createTaterBlock(ParticleTypes.SMALL_FLAME, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM3OTkxNzc3MCwKICAicHJvZmlsZUlkIiA6ICIzNzNiZmY5NzQwMmY0N2IzOTViOTZlNzc3NmNmOGFhMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdXRlcGluazczIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzgwYmRiNzEwZWUzZDE3ZGU3M2JjZjUxZGZjYmMxZjYxZTRkYzNmZDdhNzUxZDUxN2JmZDgxNGIyMDJiOTA3YmIiCiAgICB9CiAgfQp9"); - public static final Block MELON_TATER = createTaterBlock(Items.MELON_SLICE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM3OTkzNTAzNiwKICAicHJvZmlsZUlkIiA6ICJmNThkZWJkNTlmNTA0MjIyOGY2MDIyMjExZDRjMTQwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ1bnZlbnRpdmV0YWxlbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTNkMjFmYmRjYTg0ZWZlMDE2Zjc1MDc1Y2U1NWNmMTEzODJiZjAzYmI2OTEzMzZiMWUwZjg0YzcyN2Q4YzI3MSIKICAgIH0KICB9Cn0="); - public static final Block PUMPKIN_TATER = createTaterBlock(Blocks.PUMPKIN, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM4MDAwNjk5MywKICAicHJvZmlsZUlkIiA6ICI3ZGEyYWIzYTkzY2E0OGVlODMwNDhhZmMzYjgwZTY4ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJHb2xkYXBmZWwiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjEwMDQzNzdkMzBiNTVmZDJmMTc2ZTUwZTQzMWJhODhiZDllYjhmMzUzYjEwM2E2NzA5OGEzZmNiYzEyMTE5ZCIKICAgIH0KICB9Cn0="); - public static final Block JACK_O_TATER = createTaterBlock(Blocks.JACK_O_LANTERN, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM4MDA1ODg1OSwKICAicHJvZmlsZUlkIiA6ICI2MTZiODhkNDMwNzM0ZTM3OWM3NDc1ODdlZTJkNzlmZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZWxseUZpbiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xNjc3MmI3NzIzM2Y5ZDkwMzU0MzYyODc4NjFiMjA2YWMxMzExMmQ1NTJhNmM4ZTk3NTRiMjY0ODZiMWU1YmQiCiAgICB9CiAgfQp9"); - public static final Block SCULK_TATER = createTaterBlock(ParticleTypes.SOUL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM4MDAyMzkyMCwKICAicHJvZmlsZUlkIiA6ICI5NTE3OTkxNjljYzE0MGY1OGM2MmRjOGZmZTU3NjBiZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJPcmRpbmFsQ2FyZGluYWwiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDI2NTQ1MDM4ODA5NmFlYjNkMjI4YzNiOTlmNmVjNjRlYTRhMWE4NDZjOTkwM2M3ZDlkYjFjMzA5ZTI3NDY5YiIKICAgIH0KICB9Cn0="); - public static final Block SLIME_TATER = createTaterBlock(Blocks.SLIME_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM4MDAzODAyNiwKICAicHJvZmlsZUlkIiA6ICJkMGI4MjE1OThmMTE0NzI1ODBmNmNiZTliOGUxYmU3MCIsCiAgInByb2ZpbGVOYW1lIiA6ICJqYmFydHl5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzE2NzQ3YTdlMTYwNTc5NGRlYmZiYjQzYmVmZGEyY2U5ODYwNzViMzk2OWUwYjI0N2RkZDdiYzZjZGFhNTZhNTEiCiAgICB9CiAgfQp9"); - public static final Block HEROBRINE_TATER = createElderGuardianParticleTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzM4MDA4MzczMCwKICAicHJvZmlsZUlkIiA6ICJiNzVjZDRmMThkZjg0MmNlYjJhY2MxNTU5MTNiMjA0YiIsCiAgInByb2ZpbGVOYW1lIiA6ICJLcmlzdGlqb25hczEzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzZlOWNhNTQ0YTQ1NjFiOGNiY2RiMzU4MjA3Nzk5NjA0OTdlYTc0OGQ2ODVlMmIxN2M4MTRhMThkYzE5MTQ3ZmQiCiAgICB9CiAgfQp9"); - public static final Block OCHRE_FROGLIGHT_TATER = createTaterBlock(ParticleTypes.SPIT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM3OTk1NTU3MCwKICAicHJvZmlsZUlkIiA6ICJjNDM5NDI3Y2U1NGQ0NDMwYTYzOGU5OTdlYzc2YTBhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVNYXN0ZXJHb2xkZW4iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTJjMzQ4MThlZDA2ZjNkNzZhZjZkYWFiZTg3YWI1YjlhOGM0MjU4NjVlYWVkMGY4NzM0NzBhZjQ1OGIzMTUyZSIKICAgIH0KICB9Cn0="); - public static final Block PEARLESCENT_FROGLIGHT_TATER = createTaterBlock(ParticleTypes.SPIT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM3OTk3OTU5MiwKICAicHJvZmlsZUlkIiA6ICIyM2YxYTU5ZjQ2OWI0M2RkYmRiNTM3YmZlYzEwNDcxZiIsCiAgInByb2ZpbGVOYW1lIiA6ICIyODA3IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I3ZTMzYTY5Yzk5ZTA0NGI5OGQwYTExYjgzMGVmN2I3NjRkNmRlOTg3NGYyNGI0ZjQ0NjEwZjU2NWI3NmZhYjEiCiAgICB9CiAgfQp9"); - public static final Block VERDANT_FROGLIGHT_TATER = createTaterBlock(ParticleTypes.SPIT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzM4MDEwNDc3OSwKICAicHJvZmlsZUlkIiA6ICI0M2NmNWJkNjUyMDM0YzU5ODVjMDIwYWI3NDE0OGQxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJrYW1pbDQ0NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85NmFlOTZhODM0YjhlZWU4ZWRhZGFhZWYzNjhmNGIwYzkzYTM0YjJhNjM0ZWY4OWVmYzE0MzI2ZDk2NWYwMDQwIgogICAgfQogIH0KfQ=="); - public static final Block SNOWMAN_TATER = createTaterBlock(ParticleTypes.SNOWFLAKE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MjM4NjMyNjk2OSwKICAicHJvZmlsZUlkIiA6ICJjMGYzYjI3YTUwMDE0YzVhYjIxZDc5ZGRlMTAxZGZlMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDEzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg5Y2ViNDJlZmNmYzM3MmNiYjI2ZjgxN2UxNzA3YTE2ODY0YWYxNmUwZTM3Yzc5M2RiMDViMTZjZDFmODJhYyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9"); - - public static final Block ACACIA_TATER = createTaterBlock(Blocks.ACACIA_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3NTUwMzUzNiwKICAicHJvZmlsZUlkIiA6ICI4N2RiMmNjNWY4Y2I0MjI4YTU0OGRiMzJlM2Y0NmFmNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJZVG1hdGlhczEzbG9sIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzgwN2Q3NWNiMTE0ZTA1N2U1MTU2YWYzMjQ1MTdlODcwMTJkMTE1NjZiZWIxMTIxNTJiZTRhOTRhNjUyNzM1MzUiCiAgICB9CiAgfQp9"); - public static final Block ANDESITE_TATER = createTaterBlock(Blocks.ANDESITE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3NTUyMTE5MCwKICAicHJvZmlsZUlkIiA6ICJiNzQ3OWJhZTI5YzQ0YjIzYmE1NjI4MzM3OGYwZTNjNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJTeWxlZXgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWI3Mjg0OTQ0ODNkNjk1YTE3MWFmZmQ5MzczMGI2NTI3MTcyNmE1Yzg4NDBkOTZhMWFjYmY2NGI0ZGJkYjU1NSIKICAgIH0KICB9Cn0="); - public static final Block BAMBOO_TATER = createTaterBlock(Blocks.BAMBOO, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3NTUzOTU3OCwKICAicHJvZmlsZUlkIiA6ICJiYzRlZGZiNWYzNmM0OGE3YWM5ZjFhMzlkYzIzZjRmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICI4YWNhNjgwYjIyNDYxMzQwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2FjZWNmOTQ0NzY5M2U3NjlmMTc0NjlkNjcyNTFjZGRiNGI5M2U1YjY0ZWZlNzQ0NWQwNGVhMjg2YTUwZDhhM2MiCiAgICB9CiAgfQp9"); - public static final Block BEDROCK_TATER = createTaterBlock(Blocks.BEDROCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3NTU1NzgwMiwKICAicHJvZmlsZUlkIiA6ICJhYTZhNDA5NjU4YTk0MDIwYmU3OGQwN2JkMzVlNTg5MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJiejE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2M3ODJkNzkzYWY3YWEwZWJmNWY1YzlmZGRlM2Y2MzZmOTM2ODMzNjhiZjFkYWE1NDRhNDQ5MzQyYjQ4MzU1YiIKICAgIH0KICB9Cn0="); - public static final Block BIRCH_TATER = createTaterBlock(Blocks.BIRCH_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3NTU4MjIzOCwKICAicHJvZmlsZUlkIiA6ICJmMTA0NzMxZjljYTU0NmI0OTkzNjM4NTlkZWY5N2NjNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJ6aWFkODciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzY2MDAzZmNiODQwZWJjZDE4ZjMwMGI5ZmFjZDFiOGI5MzZlZjgyZTFlYTZjN2NhMjZiMmM1YjJiZGE1ZjAwNyIKICAgIH0KICB9Cn0="); - public static final Block BONE_TATER = createTaterBlock(Blocks.BONE_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3ODI5NjY2OCwKICAicHJvZmlsZUlkIiA6ICJmMjU5MTFiOTZkZDU0MjJhYTcwNzNiOTBmOGI4MTUyMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJmYXJsb3VjaDEwMCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MmI1OWM3NzhmNjY1NmJiODUwMjgxMGVhYzgyOTk3ZDM2Njk1NjNmNGZkZDZkMjRkNWFjMDA4ZDMzNGUzMTcyIgogICAgfQogIH0KfQ=="); - public static final Block BRAIN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3ODMxMjg5MiwKICAicHJvZmlsZUlkIiA6ICIwODFiZTAxZmZlMmU0ODMyODI3MDIwMjBlNmI1M2ExNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJMeXJpY1BsYXRlMjUyNDIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWRmN2UzOGViNDEzMGU5NGJjNTk0MTJkNDgwYjkxNTI5MjA2YWRhOTQ0ZWQ0YzY5OGE1ZWY5NTc5MTdmMzJmOCIKICAgIH0KICB9Cn0="); - public static final Block BRICK_TATER = createTaterBlock(Blocks.BRICKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3ODMyOTM2OSwKICAicHJvZmlsZUlkIiA6ICI0Mzk0NGU5NWZiNjI0NmJiOGIyYmQ5NDZlNWY5YjhhMCIsCiAgInByb2ZpbGVOYW1lIiA6ICJCbGFja0NvdWxkIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzk4YWRiZmFhNDBlNDIzY2ExMjU2MDQ4NGQyNmUzYTA0OTczOWE4MTA0OTBmYTBiMTU2NGE3NjViMWI2NTEzN2QiCiAgICB9CiAgfQp9"); - public static final Block BUBBLE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3ODQwMjkwOSwKICAicHJvZmlsZUlkIiA6ICIwNjNhMTc2Y2RkMTU0ODRiYjU1MjRhNjQyMGM1YjdhNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZpcGF0dXJ5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdkYzFmMThiNWI0Y2NjZTIxNzE3OTYwMDJiYzQzNGU0OWM1M2FlYjIzODI5ZTRkNmYxZDUwNWQzNDA1MjIyNDgiCiAgICB9CiAgfQp9"); - public static final Block CACTUS_TATER = createTaterBlock(ParticleTypes.DAMAGE_INDICATOR, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3ODQyMTA0OSwKICAicHJvZmlsZUlkIiA6ICIxYWZhZjc2NWI1ZGY0NjA3YmY3ZjY1ZGYzYWIwODhhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJMb3lfQmxvb2RBbmdlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82OWViZDVlNzA3ZjFkYTBkZjcxZWNkZWQ4YzVhNmQ4NTNmM2M0Nzk0M2JkNWYxNjdkMDI5ZGU3YWQwMWY4NDZkIgogICAgfQogIH0KfQ=="); - public static final Block CHORUS_TATER = createTaterBlock(ParticleTypes.REVERSE_PORTAL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ3ODQzOTg3MSwKICAicHJvZmlsZUlkIiA6ICJjYmFkZmRmNTRkZTM0N2UwODQ3MjUyMDIyYTFkNGRkZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJmaXdpcGVlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2RjODVmMzE2MGZlY2QzNjU5ZWI0ZmFiYjk1NDRjMTMwNjg4ZWM5MjE5ZjIwMzE1OTJjMWFiYzVmNjNiODA0MjIiCiAgICB9CiAgfQp9"); - public static final Block CLAY_TATER = createTaterBlock(Blocks.CLAY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDM4NjkwNiwKICAicHJvZmlsZUlkIiA6ICJjZjU0YTA5NmZlMjE0MDNlYjNmMmI5YTJiMjIyMzU2NiIsCiAgInByb2ZpbGVOYW1lIiA6ICJDaW5uYXJvbl8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjllMmY4ZDMwNzVlOWJiNzhlMjM3MjkxYzBhN2YyY2MxN2FmZjk5NTljNzM1ZmJhMTg2M2QyNDNhZTVmZTNmYyIKICAgIH0KICB9Cn0="); - public static final Block CRIMSON_TATER = createTaterBlock(Blocks.CRIMSON_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDQwOTk1OCwKICAicHJvZmlsZUlkIiA6ICI2MjM5ZWRhM2ExY2Y0YjJiYWMyODk2NGQ0NmNlOWVhOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJGYXRGYXRHb2QiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzQyNzMxYjEyYTlmZmEwYjA1NTBiM2U0MWMxZjNkMzQ3ZmZiNjVkODQwZGVlMmM4ZDIyZWM3YmQyMjg0MDUwYSIKICAgIH0KICB9Cn0="); - public static final Block DARK_OAK_TATER = createTaterBlock(Blocks.DARK_OAK_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDQyODEzNywKICAicHJvZmlsZUlkIiA6ICJmYzUwMjkzYTVkMGI0NzViYWYwNDJhNzIwMWJhMzBkMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE3IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Y5ZGYzNzdlOWY4NjQ3Nzg3YTI1NDc5MmFlMWZiMWE2ZDAzYTc1MTU2NDJjMjZiNzQ1NjI1NzJmZmQ1MTUxN2QiCiAgICB9CiAgfQp9"); - public static final Block DARK_PRISMARINE_TATER = createTaterBlock(ParticleTypes.BUBBLE_COLUMN_UP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDQ0NDM4MCwKICAicHJvZmlsZUlkIiA6ICJlMmVkYTM1YjMzZGU0M2UxOTVhZmRkNDgxNzQ4ZDlhOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDaGFsa19SaWNlR0kiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOThlYzcyMjc0NzRjZmYyNDViODIwZDMwZTU5ZGY0N2QxYmYzYjg5NWRjODI4N2U5ZGUwODEwMmY2ODM2YTQwNyIKICAgIH0KICB9Cn0="); - public static final Block DIORITE_TATER = createTaterBlock(Blocks.DIORITE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDQ2NjQyMywKICAicHJvZmlsZUlkIiA6ICI5MThhMDI5NTU5ZGQ0Y2U2YjE2ZjdhNWQ1M2VmYjQxMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCZWV2ZWxvcGVyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzE2MmI2N2E2YTI0YThmMGVkMjlkZDMzYmExNDMwMzhjZWJkMzQ2ZjhjODdlMGMzOGU1MzJhYTk5NTcxMzRiZTEiCiAgICB9CiAgfQp9"); - public static final Block DIRT_TATER = createTaterBlock(Blocks.DIRT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTMzMzQ5NiwKICAicHJvZmlsZUlkIiA6ICJiMGQ0YjI4YmMxZDc0ODg5YWYwZTg2NjFjZWU5NmFhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaW5lU2tpbl9vcmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTVlNzRjMzIyYTQ3MTVkOWE0YzEzNTk1ZWI2Y2M3MjBhNGFmZWYyOWM0ZGEwODkyZWJmNGZjNmRkZDRjZDFhZSIKICAgIH0KICB9Cn0="); - public static final Block END_STONE_TATER = createTaterBlock(ParticleTypes.END_ROD, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDUxNDI0MCwKICAicHJvZmlsZUlkIiA6ICI4MmM2MDZjNWM2NTI0Yjc5OGI5MWExMmQzYTYxNjk3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3ROb3RvcmlvdXNOZW1vIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg3YjQ5NDNjNGY4ZjY1ODQzOTg5OTY3M2U5MWFjMTU4MTVhYjI4YjVjOWViNzJjMmJkMzcxZTA4ZmQxYWMwYiIKICAgIH0KICB9Cn0="); - public static final Block FIRE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDUzNjU5NSwKICAicHJvZmlsZUlkIiA6ICI2OTBkMDM2OGM2NTE0OGM5ODZjMzEwN2FjMmRjNjFlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ5emZyXzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmVhZGQ2MDZjMWM3MDk1ODUxZmZhMzhhYThkZmYyM2YyMmRjZDc4YzQ0NDljMGU4Y2E1MDA4OTI1MmQ5MDdjMiIKICAgIH0KICB9Cn0="); - public static final Block GRANITE_TATER = createTaterBlock(Blocks.GRANITE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDU1OTQzMiwKICAicHJvZmlsZUlkIiA6ICI5MWYwNGZlOTBmMzY0M2I1OGYyMGUzMzc1Zjg2ZDM5ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTdG9ybVN0b3JteSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81NWNkYWU5OWYzOWIyOTlmNjVkMGE2ZWMzYmQxZmRlMjk5MjY4OWE2NjQ2Njg0ODJhYjFkOGE2ZDc5ZGZjNmU0IgogICAgfQogIH0KfQ=="); - public static final Block GRASS_TATER = createTaterBlock(Blocks.GRASS_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTM2ODk3MCwKICAicHJvZmlsZUlkIiA6ICJjNTZlMjI0MmNiZWY0MWE2ODdlMzI2MGRjMGNmOTM2MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJMSlI3MzEwMCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hOTk5YTE0NGNiZTUxMzIxMjkxZWQwMGIwNzM1MTFhMTAyZDFkYmJkN2U4YmZmNTNmYTMzYTI3MzhmMTA1YTc1IgogICAgfQogIH0KfQ=="); - public static final Block HAY_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDYwNTA2MSwKICAicHJvZmlsZUlkIiA6ICJjYmFkZmRmNTRkZTM0N2UwODQ3MjUyMDIyYTFkNGRkZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJmaXdpcGVlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2RmNjU4NTNmM2ViZjdjMDNlNDc3ZmVhMTRiMTkzNDViMjg0YmY1OTE0NzY0NjFhYzM2ZDM5OWMwZGJiMTQ0ZmIiCiAgICB9CiAgfQp9"); - public static final Block HONEY_TATER = createTaterBlock(ParticleTypes.DRIPPING_HONEY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MDYyNzQ5NCwKICAicHJvZmlsZUlkIiA6ICJjZGM5MzQ0NDAzODM0ZDdkYmRmOWUyMmVjZmM5MzBiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXdMb2JzdGVycyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82MjNmMmFkODMyYzI3ZTE0NTA3NmYxMjY3ODc1NTQ3NDQ0ZGZiMGNlZjgwNDAzOTIxZWQ0ZDAzYTA4NTlmYWU1IgogICAgfQogIH0KfQ=="); - public static final Block HONEYCOMB_TATER = createTaterBlock(ParticleTypes.LANDING_HONEY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTE3NjU3MSwKICAicHJvZmlsZUlkIiA6ICIxN2Q0ODA1ZDRmMTA0YTA5OWRiYzJmNzYzMDNjYmRkZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJnaWZ0bWV0b25uZXMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTkxNzkyOGUzNWYyZmFjNTlhYTFkMTRkODBjNDc4ZjM4ZDE0ZTJmNjZlZTU5ZDRlYjlkMDI1NjA1NDA2NDgxIgogICAgfQogIH0KfQ=="); - public static final Block HORN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTE5NTU5OSwKICAicHJvZmlsZUlkIiA6ICJmY2U2MjNhMDYwNWY0YzJmYTg0Zjk3Yjc3ODYwYTNjMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJQcnJpbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2UxN2Y0ZDI5NzdkYWZjZTAxOGFjMDYxNjNmMmE3YzU2NzI4NTVkMTk4ZGE4NmZhMDUwZjI3YTdjNDViMmRhNCIKICAgIH0KICB9Cn0="); - public static final Block JUNGLE_TATER = createTaterBlock(Blocks.JUNGLE_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTIxNjcxMSwKICAicHJvZmlsZUlkIiA6ICJiYjdjY2E3MTA0MzQ0NDEyOGQzMDg5ZTEzYmRmYWI1OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJsYXVyZW5jaW8zMDMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjkxMDVlZWJmOTllYzM1YWMwOGFhYTJlZDhhYzcyMTU5MGFkYmRiMWViM2ExNThhODJjMTFlNzFlNzZkMjhhYSIKICAgIH0KICB9Cn0="); - public static final Block MYCELIUM_TATER = createTaterBlock(ParticleTypes.MYCELIUM, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTM4NDk2MCwKICAicHJvZmlsZUlkIiA6ICJhYTZhNDA5NjU4YTk0MDIwYmU3OGQwN2JkMzVlNTg5MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJiejE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2YzNDQ3YmJiOTkzMjFiMzk5YjdhMTkxM2Q5YmM0ZTkwZThiMGZjOWI5NTIwYWY0NWE4ZjU5YTE1NDBkNGI2MjAiCiAgICB9CiAgfQp9"); - public static final Block NETHER_WART_TATER = createTaterBlock(ParticleTypes.CRIMSON_SPORE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTI2MDY1OSwKICAicHJvZmlsZUlkIiA6ICI2MmU1ZjY3NjAwMTc0ODU1OGU5OGYxZGU0NjU3MzY0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJHdW5IaXBweSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84MWMwNWU4YzkxYTRjYTgzMTIwNzk5MDUzMjcwZGZkN2ZkZjEzNzY5ODhhMWEzOTM2NDUxNDBhZTg5ZWI2NzYyIgogICAgfQogIH0KfQ=="); - public static final Block OAK_TATER = createTaterBlock(Blocks.OAK_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTI4MjY4OCwKICAicHJvZmlsZUlkIiA6ICIxNzU1N2FjNTEzMWE0YTUzODAwODg3Y2E4ZTQ4YWQyNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJQZW50YXRpbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yOGNmYzIwODk2NmUyZjUyMDZiMWFiYTA0ODllNWZkYjNmMDVlNmQ5NGJlZmJjNjE4YWQ4MGU3NGViMTAxNmQyIgogICAgfQogIH0KfQ=="); - public static final Block OBSIDIAN_TATER = createTaterBlock(Blocks.OBSIDIAN, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTMwMzg2OCwKICAicHJvZmlsZUlkIiA6ICI5MThhMDI5NTU5ZGQ0Y2U2YjE2ZjdhNWQ1M2VmYjQxMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCZWV2ZWxvcGVyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzM4YWRlYThmNDg0ZGJhNWJhZjY3YWNlM2VlNzY3NTc1OGUyMzE4ODY4YjJkNzI1NDJlZDNmZmYwZDAwOWYyMSIKICAgIH0KICB9Cn0="); - public static final Block PODZOL_TATER = createTaterBlock(Blocks.PODZOL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTQwNTI1MywKICAicHJvZmlsZUlkIiA6ICIwNjNhMTc2Y2RkMTU0ODRiYjU1MjRhNjQyMGM1YjdhNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZpcGF0dXJ5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzVmZTNjZmNlN2MyNDFmZGFlZmU4ZDAyNTVhNTQ1ZDJjMzI5YzEyODMyMzJkNjFlYWE3MzI0YjMwYThmNDc4ZjIiCiAgICB9CiAgfQp9"); - public static final Block PRISMARINE_BRICK_TATER = createTaterBlock(ParticleTypes.BUBBLE_COLUMN_UP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTM0NDg0OCwKICAicHJvZmlsZUlkIiA6ICJjNjEwOTExMDhlOTQ0MWRhODQyZDA5MDVmMDAyOWVhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkZVlvbm8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmZkYjExYjIxNDdiMzZlZDQ5NjYzOWJjZjhiZWE4ZDA3ZTQ1ZGU2MTBlYzA4MjIzY2EzZDU2YWVmYjhkODFjZSIKICAgIH0KICB9Cn0="); - public static final Block PRISMARINE_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTM2NTMxMywKICAicHJvZmlsZUlkIiA6ICJjZGM5MzQ0NDAzODM0ZDdkYmRmOWUyMmVjZmM5MzBiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXdMb2JzdGVycyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hYmFlMGFiZGM1MDYwMTQ3NTFlODlmYTY1YmI4MDJjODFmYzJlZTNlZDBlMGEwNjU4MmFiYjViZGQwODhlNDQwIgogICAgfQogIH0KfQ=="); - public static final Block RED_SAND_TATER = createTaterBlock(new BlockStateParticleEffect(ParticleTypes.FALLING_DUST, Blocks.RED_SAND.getDefaultState()), "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTM4NDk0MywKICAicHJvZmlsZUlkIiA6ICJkODAwZDI4MDlmNTE0ZjkxODk4YTU4MWYzODE0Yzc5OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJ0aGVCTFJ4eCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83Nzg5YTBmNTczMzQyNDhiNjAyMzIyZjU3ZmIyZWQ3MDg0ODRiYjZmNzc3NDQ0MmM3ZjJmMmJmMmVjMDkwNjRmIgogICAgfQogIH0KfQ=="); - public static final Block SAND_TATER = createTaterBlock(new BlockStateParticleEffect(ParticleTypes.FALLING_DUST, Blocks.SAND.getDefaultState()), "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTQwNzkxOCwKICAicHJvZmlsZUlkIiA6ICJhMjk1ODZmYmU1ZDk0Nzk2OWZjOGQ4ZGE0NzlhNDNlZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJWaWVydGVsdG9hc3RpaWUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmQ1MzMyMDc2ZjIwZDNmMWFkNzY2ZjRiZDgzNjQ5YzU3M2QxYjNiZjY3YWJmYTViZTI2Y2RmNWNhNGE5NDhjOCIKICAgIH0KICB9Cn0="); - public static final Block SEA_LANTERN_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTQyNzk0NCwKICAicHJvZmlsZUlkIiA6ICI0ZjU2ZTg2ODk2OGU0ZWEwYmNjM2M2NzRlNzQ3ODdjOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE1IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2NjZjc2NDE1NmJiMjYyYTNkNDdmNGI4ODU3MTZhYTc3NDkwNzdjNTZhMzFhYTQxMjQ4OTM2MjU1ZWQzOGUyNyIKICAgIH0KICB9Cn0="); - public static final Block SHROOMLIGHT_TATER = createTaterBlock(Blocks.SHROOMLIGHT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTQ0OTIzMiwKICAicHJvZmlsZUlkIiA6ICIzOTVkZTJlYjVjNjU0ZmRkOWQ2NDAwY2JhNmNmNjFhNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzcGFyZXN0ZXZlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2M3YWFlNGQ1ZTAzZDhhNzU4Y2RjZTkxYmQ3NDU3M2FiYzUzMDZkZmNhNmU0NGU1ZDBlMTRjYTZjMTQwODViMzYiCiAgICB9CiAgfQp9"); - public static final Block SHULKER_TATER = createTaterBlock(ParticleTypes.END_ROD, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTQ2OTk2MiwKICAicHJvZmlsZUlkIiA6ICI0NWY3YTJlNjE3ODE0YjJjODAwODM5MmRmN2IzNWY0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJfSnVzdERvSXQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTVlZmQ4NzVlZTVmNGEzN2FkMDVkMzkyYTY1ODg2YzZkY2FmMTAxODhjOTE5OTY3M2I3ODJiNzk1YTI5YTIzMSIKICAgIH0KICB9Cn0="); - public static final Block SMOOTH_STONE_TATER = createTaterBlock(Blocks.SMOOTH_STONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTUwNjUzOCwKICAicHJvZmlsZUlkIiA6ICIxNzU1N2FjNTEzMWE0YTUzODAwODg3Y2E4ZTQ4YWQyNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJQZW50YXRpbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84ZjdjODEyNDVhNDQ0MzI4Y2ZmOGEzNjZkNWE1NWE2ODk3ZGY5OWY4OTE4NWFkYjc2YjkyMjU1NTFiZmM2Nzg2IgogICAgfQogIH0KfQ=="); - public static final Block SOUL_SAND_TATER = createTaterBlock(ParticleTypes.SOUL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTUyNzk1OSwKICAicHJvZmlsZUlkIiA6ICJhYjlkYmMzZjk4NGE0ZWI4YTVmY2RlYWMzNzEzZWFkMSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDeWJvcm51dDIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTc1MGM0MDdkNjIwNWM2ZDU3MmVkZGJjYzE2MmUyZThkZDYxZjNhMjZmYjBlYWE3ZGZmOTliY2Y4ZDAzNTE5YSIKICAgIH0KICB9Cn0="); - public static final Block SPONGE_TATER = createTaterBlock(ParticleTypes.DRIPPING_WATER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTU0NzQ2OCwKICAicHJvZmlsZUlkIiA6ICI0MjEwNTYxMWQxZjM0NzAyOTQ4NjE3OTYzMDY3NjY2NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUcmlraXRyYWthdGVsYXp6IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzY5N2E0MTAyNjI3YjU1NDkwNjE0ZjQ3NWQ0ZmRlMGRmNTFhOGQwYzQ1ZTk1NzM3OTlkMTk4ZjRkZWNhMzNhMTQiCiAgICB9CiAgfQp9"); - public static final Block SPRUCE_TATER = createTaterBlock(Blocks.SPRUCE_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTU2NzM5OCwKICAicHJvZmlsZUlkIiA6ICJiNjc3NTgwYzExYmU0ZjNiODI1OGM0YjBkNzNhNzg0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJPZmZpY2lhbGx5SksiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmU0MDAzMDg5MDA1MzY1NDVmODg2MDg0ZDlmNDY1ZjE3MzExYTQxYjc0MTBjZmFiYTMyM2E1YWMzYjFiOWE5YyIKICAgIH0KICB9Cn0="); - public static final Block STONE_BRICK_TATER = createTaterBlock(Blocks.STONE_BRICKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTU4OTM1MiwKICAicHJvZmlsZUlkIiA6ICI3ZGEyYWIzYTkzY2E0OGVlODMwNDhhZmMzYjgwZTY4ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJHb2xkYXBmZWwiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmRmM2NkYjUyNjY1MzljMzQ0ODVkNDM5YzZhMDdiYWEzZmJlNTU1NmQ5ODBlZjE0NDgzY2Q2ZjUyNzFiMDg5YiIKICAgIH0KICB9Cn0="); - public static final Block TARGET_TATER = createTargetTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTYxMDUwNSwKICAicHJvZmlsZUlkIiA6ICI2MjM5ZWRhM2ExY2Y0YjJiYWMyODk2NGQ0NmNlOWVhOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJGYXRGYXRHb2QiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzg2YjUyZWQzZDJiMmE2ODJiNGM2ZjFkNDBhOWNlYWJmNzJlN2M1YjYwYjhkOTJkMmRjZWU5N2E4Nzk5NDUwZiIKICAgIH0KICB9Cn0="); - public static final Block TERRACOTTA_TATER = createTaterBlock(Blocks.TERRACOTTA, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTYzNzE4MywKICAicHJvZmlsZUlkIiA6ICIxYTc1ZTNiYmI1NTk0MTc2OTVjMmY4NTY1YzNlMDAzZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUZXJvZmFyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzU3ZjEyMGQ5MmYzZjA3NjM1MmI2ODIzNDVmZGI4MjIwNGI5MjBlNTlkMjI2YzRjNmQyYzY0ZDVhYmM2ODYwZTEiCiAgICB9CiAgfQp9"); - public static final Block TNTATER = createTaterBlock(ParticleTypes.EXPLOSION, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTY2NTYyNSwKICAicHJvZmlsZUlkIiA6ICI2MTZiODhkNDMwNzM0ZTM3OWM3NDc1ODdlZTJkNzlmZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZWxseUZpbiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS80NDBkMTc1ZGVkNjJmZjdiM2NmOWRlOTc5MTk2ZTdiOTVkYThhMjVlOWU4ODhjNGJlZDA2ZjVjMDExZGM1NGE4IgogICAgfQogIH0KfQ==", 10); - public static final Block TUBE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTY4MDk2OSwKICAicHJvZmlsZUlkIiA6ICI4N2RiMmNjNWY4Y2I0MjI4YTU0OGRiMzJlM2Y0NmFmNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJZVG1hdGlhczEzbG9sIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2RhZDBhNGVmNGM5OTk0ZWUzMmEwMmZjYjc5NjA2MDBhMjk1YjMxYTZmZWY5NDY1Mjk5ODE4OTI5NWZkMmVlODQiCiAgICB9CiAgfQp9"); - public static final Block WARPED_TATER = createTaterBlock(Blocks.WARPED_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTcwNDAyMCwKICAicHJvZmlsZUlkIiA6ICIyNzZlMDQ2YjI0MDM0M2VkOTk2NmU0OTRlN2U2Y2IzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBRFJBTlM3MTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWI0ZGIxOTM2NTc3Y2ZjYmJhY2UxZGJlZDcyNDgzNDgyYWYzMmQ5OWVjZDA5MGM4ZjE0NWNhYzg4YWU0ZThhMiIKICAgIH0KICB9Cn0="); - public static final Block WARPED_WART_TATER = createTaterBlock(ParticleTypes.WARPED_SPORE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTcyMzM1NiwKICAicHJvZmlsZUlkIiA6ICI2OTBkMDM2OGM2NTE0OGM5ODZjMzEwN2FjMmRjNjFlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ5emZyXzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTc0OGNmMWM3OGNmZGVhNzMwYTdjZTA1YWU5NzNhOGFmZTMyNmRjMmY3MWY4MmE0NTIzMmQ5YzZiMDg3NzZkOSIKICAgIH0KICB9Cn0="); - public static final Block WOOL_TATER = createTaterBlock(Blocks.WHITE_WOOL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzQ4MTc0NDQ1NywKICAicHJvZmlsZUlkIiA6ICJkMGI4MjE1OThmMTE0NzI1ODBmNmNiZTliOGUxYmU3MCIsCiAgInByb2ZpbGVOYW1lIiA6ICJqYmFydHl5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2VkNTY0ZmE5OGI3ZThlM2FiZjQxNzc5YmZlNzU5Y2EwYTMxOTFjOGFhNzBmMmVlZjBhZjEzOWJhMTEwMmUyN2UiCiAgICB9CiAgfQp9"); - - public static final Block ACACIA_LOG_TATER = createTaterBlock(Blocks.ACACIA_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTk5OTE1NCwKICAicHJvZmlsZUlkIiA6ICI4ODBiZWMwYTE0MmM0YzRlYTJlZjliMTFiMTBkNWNiNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJmZ2FiIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNiMTg1YmU3MTIxODAxYjVhOTU2Y2U0NjI1ODNjNTU5MjhiMzFjYmVhNzRlNGFhZTgyZTczMzAzMTdhMWFlNjAiCiAgICB9CiAgfQp9"); - public static final Block ANGRY_BEE_TATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTE5MTQzNiwKICAicHJvZmlsZUlkIiA6ICI0NmY3N2NjNmQ2MjU0NjEzYjc2NmYyZDRmMDM2MzZhNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaXNzV29sZiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yMTAwNGRjMjBjZTc0YWRiY2MzMWYxNTg4ZjI2OGI0Y2I0MzFiNTAxNjc5ZTFkYjc0NTE4NjliZDA0Nzc5YjRiIgogICAgfQogIH0KfQ=="); - public static final Block BEACON_TATER = createTaterBlock(ParticleTypes.ENTITY_EFFECT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTIxMDQ2OCwKICAicHJvZmlsZUlkIiA6ICIyYWQwZDlmMGUxMTM0ODM0OGVmNDQ0OWRmNTRlYTFkNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJGaXJlQjB5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzZmN2ZkOTUyZWM1ZGE3NGEyNTIwODg1MzE2MWExNWQyZjZkMDIyODM1YWZlODgxYmQyNzFjNzEwYmEyNTkzNWUiCiAgICB9CiAgfQp9"); - public static final Block BEE_NEST_TATER = createTaterBlock(ParticleTypes.DRIPPING_HONEY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTIyNjgzNiwKICAicHJvZmlsZUlkIiA6ICJhMjk1ODZmYmU1ZDk0Nzk2OWZjOGQ4ZGE0NzlhNDNlZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJWaWVydGVsdG9hc3RpaWUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzdiMGIzODUzOGZhYzk3ZDI2MjQxYmY1MTIxMmEyNjY2NzU5NmIxYjE0ZjEzMDc0MzJjM2RjZWYwMzNhZjFkMCIKICAgIH0KICB9Cn0="); - public static final Block BEE_TATER = createTaterBlock(ParticleTypes.FALLING_HONEY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTI3MTc3MiwKICAicHJvZmlsZUlkIiA6ICJkZTE0MGFmM2NmMjM0ZmM0OTJiZTE3M2Y2NjA3MzViYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJTUlRlYW0iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODA0ODBiOTAyYmIzMmUyYjE0NWJiNTI2MjYyOWFkN2E5MjBkMzYwMDM2NWQzMTAxOTM2ZWZjMzVhYWQ4MzBiZCIKICAgIH0KICB9Cn0="); - public static final Block BEEHIVE_TATER = createTaterBlock(ParticleTypes.DRIPPING_HONEY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTI4OTMzOSwKICAicHJvZmlsZUlkIiA6ICI0OTVlYTMyM2E0N2U0ODk0OWRjZmJmNDQxZmFhODM4YSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDb29sZVZlbnQxNjgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjUwOGEzMGExYmJjNjVmYmZjNThkYTVkYzE1ZDRlOTMwYjIzYjFiNDhhZmU3MjkyM2M1MDZhMjdjYmUwNjM2NiIKICAgIH0KICB9Cn0="); - public static final Block BIRCH_LOG_TATER = createTaterBlock(Blocks.BIRCH_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDAyOTMwNCwKICAicHJvZmlsZUlkIiA6ICI0OWIzODUyNDdhMWY0NTM3YjBmN2MwZTFmMTVjMTc2NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJiY2QyMDMzYzYzZWM0YmY4IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzY5NTBjNjlkOTJhNjM1Y2I5NDVmODQ1YTFhNWM0MjhhOGUwYTBjYzJhOGIwYzU2MzUzOGVjMTcxYzRkY2VlNiIKICAgIH0KICB9Cn0="); - public static final Block BLACKSTONE_TATER = createTaterBlock(Blocks.BLACKSTONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTMyOTEwOCwKICAicHJvZmlsZUlkIiA6ICIzZjM4YmViZGYwMWQ0MjNkYWI4MjczZjUwNGFiNGEyNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJjazM0Nzk0MjM1NzUzNzMxIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2U2N2FjZDEyYzNkZWU5MThjYzVmM2IxYTg4YWI3MzY3NTQ5Y2FmOTc4MzU3ZDc5ZDE5ZDJkNDg2YjdhY2MyOTgiCiAgICB9CiAgfQp9"); - public static final Block BLAZE_TATER = createTaterBlock(ParticleTypes.FLAME, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTM0ODczMiwKICAicHJvZmlsZUlkIiA6ICJhOGJhMGY1YTFmNjQ0MTgzODZkZGI3OWExZmY5ZWRlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJDcmVlcGVyOTA3NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84NWU2NzhkNmVkYWIwMzVkMjU4NDFjZmI0YzkwYjYzMWE3MjQyZTlkNGNmNmJjZjAwZjE2OGI4YmY3Y2QyOTBkIgogICAgfQogIH0KfQ=="); - public static final Block BOOKSHELF_TATER = createTaterBlock(ParticleTypes.ENCHANT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTM2Nzc1NiwKICAicHJvZmlsZUlkIiA6ICI2MmU1ZjY3NjAwMTc0ODU1OGU5OGYxZGU0NjU3MzY0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJHdW5IaXBweSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kYmUwMzJmYTY3NTliYTEzN2U1MmFiZGE0NGMwOTkzNDQ2OThkODBiNjQyNTdjOTI5NTIxM2FmMTY4MzUyY2FlIgogICAgfQogIH0KfQ=="); - public static final Block BROWN_MOOSHROOM_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTM5OTQzOSwKICAicHJvZmlsZUlkIiA6ICJiMGQ0YjI4YmMxZDc0ODg5YWYwZTg2NjFjZWU5NmFhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaW5lU2tpbl9vcmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTJiOTI5NzVkOTUzNDhkN2NiOTQxMzNhZmNiMTFiNTZmYzBiNGIxYzM3MzY0N2RkYTgzODc2NDQyZWVlMmQ0MSIKICAgIH0KICB9Cn0="); - public static final Block BROWN_MUSHROOM_TATER = createTaterBlock(Blocks.BROWN_MUSHROOM_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTQyMjExOCwKICAicHJvZmlsZUlkIiA6ICIyYzEwNjRmY2Q5MTc0MjgyODRlM2JmN2ZhYTdlM2UxYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJOYWVtZSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9kNTI2OGI5OTBhNDk3ZDY2MDhmODJiYTY2NGE4YzdjOTgxYzI4MDU1YWFjMzQ4OTVmMjMwY2JkYjI4NGI2N2I4IgogICAgfQogIH0KfQ=="); - public static final Block CAVE_SPIDER_TATER = createTaterBlock(ParticleTypes.SPORE_BLOSSOM_AIR, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTQ0MDQ0NCwKICAicHJvZmlsZUlkIiA6ICIyYWQwZDlmMGUxMTM0ODM0OGVmNDQ0OWRmNTRlYTFkNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJGaXJlQjB5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzk0OTkxMDVmNDU4YjI1YTFlODViNzMxMmQwMGI0ZjFlMWQ3MWQ1ZmQwOGUyMTY1ZDc3NjkzYWMyY2FiMmYyYTgiCiAgICB9CiAgfQp9"); - public static final Block COBBLED_DEEPSLATE_TATER = createTaterBlock(Blocks.COBBLED_DEEPSLATE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTQ2MzM5NSwKICAicHJvZmlsZUlkIiA6ICIzYTNmNzhkZmExZjQ0OTllYjE5NjlmYzlkOTEwZGYwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb19jcmVyYXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmIzNzhiMTViNDZiNDY5YjM2ZGExZmIwYWM0MWYyZDYxZGY2NmRkMzE1ZDViMDA3MTRjZjc1NjRkNmExZWVhMiIKICAgIH0KICB9Cn0="); - public static final Block COBBLESTONE_TATER = createTaterBlock(Blocks.COBBLESTONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTQ4MDE2OSwKICAicHJvZmlsZUlkIiA6ICI0NGNlMmMwZTFjNTM0ZDhmYmExNmNkNDhlYjkyYTUxZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJ4WGlyYW56dThYeCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83ZWZmYTNjMDY5ZGE5MTk5NTAzZjJmZWNjMWRiODNmZTg0MzQ5MTIwMGJhNTc3NmQ2ZTc5OWNkMjRhNzcxYzQ0IgogICAgfQogIH0KfQ=="); - public static final Block COCOA_TATER = createTaterBlock(Blocks.COCOA, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTQ5Njc1NCwKICAicHJvZmlsZUlkIiA6ICJkMWY2OTc0YzE2ZmI0ZjdhYjI1NjU4NzExNjM3M2U2NSIsCiAgInByb2ZpbGVOYW1lIiA6ICJGaW9saWVzdGEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzRmNjFlNTE3ZWEyMTE4ZDAwZmM2OGQzZDg4YWJkNTBiNTlmM2M2ZjM2YTYzYjUxNzkzYzg2OTljMGE1MjQ0MCIKICAgIH0KICB9Cn0="); - public static final Block COLD_STRIDER_TATER = createTaterBlock(ParticleTypes.SNOWFLAKE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTUxNjQ4NCwKICAicHJvZmlsZUlkIiA6ICIxNmFkYTc5YjFjMDk0MjllOWEyOGQ5MjgwZDNjNjE5ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJMYXp1bGl0ZV9adG9uZSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hNzFiYTc1OTc3NDRkYjI1ZjBlZmEyMGI4N2MzZTZhYTI4NDM4NWRmYWNmMjQ5NTJjODBiODdhZmE3ZjZjYzg0IgogICAgfQogIH0KfQ=="); - public static final Block COW_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTU0NzMzMSwKICAicHJvZmlsZUlkIiA6ICJmNThkZWJkNTlmNTA0MjIyOGY2MDIyMjExZDRjMTQwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ1bnZlbnRpdmV0YWxlbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTQ1ZjE0MjkxZTkxZjEyMGU5YWZiYTI3MjkzMDJjYjc1ZTdlYWIyYWZkN2YzYzM5MTI5ZjE0ZGZjODA2MWM1NSIKICAgIH0KICB9Cn0="); - public static final Block CRAFTING_TATER = createTaterBlock(Blocks.CRAFTING_TABLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTU2Mjk2MSwKICAicHJvZmlsZUlkIiA6ICIyNzZlMDQ2YjI0MDM0M2VkOTk2NmU0OTRlN2U2Y2IzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBRFJBTlM3MTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzg4OGVjN2YzMmVlNTU1YTI5ZTA3MzYwMDk2MWY5MDYxODIwM2U2MGJhZjEzYTA3N2Y0ODIxYzRiOThiZDYyZiIKICAgIH0KICB9Cn0="); - public static final Block CRIMSON_NYLIUM_TATER = createTaterBlock(ParticleTypes.CRIMSON_SPORE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTU5MTE3MSwKICAicHJvZmlsZUlkIiA6ICIzOTVkZTJlYjVjNjU0ZmRkOWQ2NDAwY2JhNmNmNjFhNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzcGFyZXN0ZXZlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2M0N2Y3ZWY0ZDIxZGY5MGVhYTJjZjg3NmQ1M2EwMjc3M2IxMzI2MmY5MDMyNGIwM2Q5NDU0NmZhMGI1MmNiNWEiCiAgICB9CiAgfQp9"); - public static final Block CRIMSON_STEM_TATER = createTaterBlock(Blocks.CRIMSON_STEM, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDA0NzA1OCwKICAicHJvZmlsZUlkIiA6ICIzM2ViZDMyYmIzMzk0YWQ5YWM2NzBjOTZjNTQ5YmE3ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEYW5ub0JhbmFubm9YRCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yNDdmZWU0ZDQ3ZTIwOTc2MTUyMWEzYWRjOGY3OWMzZjY5YjljZDYwODM4NDlhMjc5ZDM3NWU4NDdmY2EzNjlkIgogICAgfQogIH0KfQ=="); - public static final Block DARK_OAK_LOG_TATER = createTaterBlock(Blocks.DARK_OAK_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDA3NjAzMCwKICAicHJvZmlsZUlkIiA6ICI0Mzk0NGU5NWZiNjI0NmJiOGIyYmQ5NDZlNWY5YjhhMCIsCiAgInByb2ZpbGVOYW1lIiA6ICJCbGFja0NvdWxkIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzYyM2NlYjEyMjUxZWIyZTU3MDIxMGE4NDMzMjEzMDc4ZDNiNTEyYjc1OWUyOTA2ZjYzMTFkMmZjYzk1MjQ4ODYiCiAgICB9CiAgfQp9"); - public static final Block DAYLIGHT_DETECTOR_TATER = createDaylightDetectorTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTY1NTQ0MSwKICAicHJvZmlsZUlkIiA6ICJhYTZhNzUwNWVkYmU0NjNiYjk1NWYyMWY0MjNiYTM1NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJub3RhbmR5d2FyaG9sIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzM1MjNmNGM5ZTliY2NiZDQyYWJhYmI5ZjhmY2U1MGYxYTI3MjYwZWZlMDBkMjBhNDI1YzZiMjk2OGE3YWYyMjciCiAgICB9CiAgfQp9", false); - public static final Block DEAD_BRAIN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTY4MTY3MywKICAicHJvZmlsZUlkIiA6ICI0ZjU2ZTg2ODk2OGU0ZWEwYmNjM2M2NzRlNzQ3ODdjOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE1IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzVkYjgyNTZiZDc4ZjNlMzRlMjY2NmFlMjlmMjk0MzNhYTcxODc1MjVmYmYzZTUzOWMzYmYwMTBhMjhjYTM5MzUiCiAgICB9CiAgfQp9"); - public static final Block DEAD_BUBBLE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTcwNDg4NywKICAicHJvZmlsZUlkIiA6ICJjNjEwOTExMDhlOTQ0MWRhODQyZDA5MDVmMDAyOWVhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkZVlvbm8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmMwZDQxMDU1ZGY1YmEyMzQyZGVkZDc2ZmVkYjBkN2YzZjJkOTkyZWJkYjU4NzBlNDI2YzYxZGNmMmM2NzY4NiIKICAgIH0KICB9Cn0="); - public static final Block DEAD_FIRE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTcyMjU1NSwKICAicHJvZmlsZUlkIiA6ICI0MGNhN2RiMGRlMDc0YmMwOGUxYjUzZTY2ZmY1ZjQxNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJIY3JlYW02OSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84OGNiNzBmNjAyZjliYzMwNjRjMzRmODBmNDcxNDhhN2E2YzMyZGRjNmY1NTgwZGQwOWZhZTQ3ODEyZTk1ZDMxIgogICAgfQogIH0KfQ=="); - public static final Block DEAD_HORN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTc1NDUzMSwKICAicHJvZmlsZUlkIiA6ICJhOGJhMGY1YTFmNjQ0MTgzODZkZGI3OWExZmY5ZWRlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJDcmVlcGVyOTA3NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9hNWFlMzFiMWRiZGQyNTE2NDM4MzUyNjg3NTA2OTliODgwZDgzYzJjZWU3NTc4NzQ1Y2NjNmFkYjI3ODBkMTkyIgogICAgfQogIH0KfQ=="); - public static final Block DEAD_TUBE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTc3MTYyMiwKICAicHJvZmlsZUlkIiA6ICJjMTNkYzkxZjg1YjA0ZWM4OGU2NDk5YzdjZDc4Zjk3MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJjcnlwdGljX2Zyb2dfIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzIzNmQ5YjUzNWZlOGZiNmYwYmNhMTg4ZjVhNmZlZGEzYzcyNDIzZDJiZjNkMjI2YTg1OTgzZDU4MDUzMTliNzIiCiAgICB9CiAgfQp9"); - public static final Block DEEPSLATE_BRICK_TATER = createTaterBlock(Blocks.DEEPSLATE_BRICKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTc4NjYzMCwKICAicHJvZmlsZUlkIiA6ICI0OTVlYTMyM2E0N2U0ODk0OWRjZmJmNDQxZmFhODM4YSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDb29sZVZlbnQxNjgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzg1M2VkODliNWUwNTcxN2U3YmQwMGU5YTMzZDdlNjVlYmRlNTVlODFjMGVmODY4ZmVjYzdkMjE1OGJjNmExZiIKICAgIH0KICB9Cn0="); - public static final Block DEEPSLATE_TATER = createTaterBlock(Blocks.DEEPSLATE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTgwMzQyMSwKICAicHJvZmlsZUlkIiA6ICI4MmM2MDZjNWM2NTI0Yjc5OGI5MWExMmQzYTYxNjk3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3ROb3RvcmlvdXNOZW1vIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I3NmQ3YjFkODViOGI3MjQ5MzA0NzBlYjI5ODZiOTE0Yjg1YzQ5ODNmYzU2NTFhNTVmMDk1NzFhYmFiYzhiNDIiCiAgICB9CiAgfQp9"); - public static final Block DRIED_KELP_TATER = createTaterBlock(Blocks.DRIED_KELP_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTgxNjg3OSwKICAicHJvZmlsZUlkIiA6ICIyMWUzNjdkNzI1Y2Y0ZTNiYjI2OTJjNGEzMDBhNGRlYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJHZXlzZXJNQyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9iYzJhYmRjYTU5NGJmYjk3YjJhNGI0OWQ4OGVmN2JjMDE5NjkxNzFhODliZTQxMTQyNmNlNWMwZjk0ZmE3YTk0IgogICAgfQogIH0KfQ=="); - public static final Block DROWNED_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTgzNTU2MywKICAicHJvZmlsZUlkIiA6ICIxNzU1N2FjNTEzMWE0YTUzODAwODg3Y2E4ZTQ4YWQyNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJQZW50YXRpbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81ZWE2ZjAzYzBjYWI0YTk2ODk3NmFkOTViZWFiYTRjNjBhYjQ2NzU1YWE3ZmY4NDAwYjJkODczODNkZjZiODg1IgogICAgfQogIH0KfQ=="); - public static final Block EYE_OF_ENDER_TATER = createTaterBlock(ParticleTypes.REVERSE_PORTAL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTg1NDczNywKICAicHJvZmlsZUlkIiA6ICI5MGQ1NDY0OGEzNWE0YmExYTI2Yjg1YTg4NTU4OGJlOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJFdW4wbWlhIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzM2ZmM5ZmMyYjBhYjk0YTExMzAzZTNlZmI4YjI1MzQ2NjJlNWQxMWFjOGE5YjkzMTBiNTg4YTUxMmVhYWI1NWUiCiAgICB9CiAgfQp9"); - public static final Block FOX_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTM1MzEwNSwKICAicHJvZmlsZUlkIiA6ICJmMTA0NzMxZjljYTU0NmI0OTkzNjM4NTlkZWY5N2NjNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJ6aWFkODciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDBkNDBiYzJhYTc4OGQ2ZjlkMGUzZmNkZTUwNzE0ZjNmNDdkNWRiNjRmM2Q2YTExYjJjM2ZhZDJiNjViYTFlYSIKICAgIH0KICB9Cn0="); - public static final Block GHAST_TATER = createTaterBlock(ParticleTypes.DRIPPING_OBSIDIAN_TEAR, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTg5NTAxOCwKICAicHJvZmlsZUlkIiA6ICI0ZjU2ZTg2ODk2OGU0ZWEwYmNjM2M2NzRlNzQ3ODdjOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE1IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzY2NTg1YzRmYzA1N2UxNWJmYzI4ZGI3YWU4YWM3NzgwMTY1MDRmMzFkNTQyMmRmZGEyMzQ1OTY3YmE1M2M0NGYiCiAgICB9CiAgfQp9"); - public static final Block GILDED_BLACKSTONE_TATER = createTaterBlock(Blocks.GILDED_BLACKSTONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTkxNjc3NywKICAicHJvZmlsZUlkIiA6ICJjNTZlMjI0MmNiZWY0MWE2ODdlMzI2MGRjMGNmOTM2MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJMSlI3MzEwMCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85ODdlNjAyMTJkMmQ2MDEyM2UyNmQxYmU5NzdkZTc4NGFhMWFmYzc4MTUyMjY0NWM5YTc0ZTQ5MmYyMjk1ZTY3IgogICAgfQogIH0KfQ=="); - public static final Block GLOW_SQUID_TATER = createTaterBlock(ParticleTypes.GLOW_SQUID_INK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTkzNDYxNywKICAicHJvZmlsZUlkIiA6ICI5NTE3OTkxNjljYzE0MGY1OGM2MmRjOGZmZTU3NjBiZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJPcmRpbmFsQ2FyZGluYWwiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWRkNjljYWRhOGU2MDk1NzcwZmZjZmM5MWZkNmRmODUxNjMwZWZkM2JhZDA4ZGZjZTc4YmNiMzBhNTcwMjkwOSIKICAgIH0KICB9Cn0="); - public static final Block GLOWSTONE_TATER = createTaterBlock(ParticleTypes.GLOW, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTk1MzY5OCwKICAicHJvZmlsZUlkIiA6ICIwNTVhOTk2NTk2M2E0YjRmOGMwMjRmMTJmNDFkMmNmMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVWb3hlbGxlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzU4MjgzZGQ4NTVmOTk4MjZjOGU5MzhkMGYxNjJmMTExYjA2N2JhZDI2Njg1ZTYwNmIzNWM4NDc5NDZlNGYzOGYiCiAgICB9CiAgfQp9"); - public static final Block HUSK_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTk3MDIyNiwKICAicHJvZmlsZUlkIiA6ICI3NTA5NzZmODRmMDE0NWFhYTc0MzAwYWJhMzc5MTIzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICIwY2hlYXRzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzI2YTg4ZGZiMTAzZTBhOTM4Nzc2YmIyN2Q0NjRiZGJjMDJkMzkyMjk4Njk5NzUxNzlmMTM3NjgwOGE2NzQ0YjUiCiAgICB9CiAgfQp9"); - public static final Block INVERTED_DAYLIGHT_DETECTOR_TATER = createDaylightDetectorTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzU2OTk4ODg1MiwKICAicHJvZmlsZUlkIiA6ICJjZGM5MzQ0NDAzODM0ZDdkYmRmOWUyMmVjZmM5MzBiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXdMb2JzdGVycyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9iNzIxYTk1MDNjMmMyYjI1ZTVkZmZlNWJhZDFmOGJkOWY0ZjYyMGY1YWQ3OWE0NTY4MzIyYjQwNTk3MzQyNmRkIgogICAgfQogIH0KfQ==", true); - public static final Block JUNGLE_LOG_TATER = createTaterBlock(Blocks.JUNGLE_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDA5Njg4NiwKICAicHJvZmlsZUlkIiA6ICIxYWZhZjc2NWI1ZGY0NjA3YmY3ZjY1ZGYzYWIwODhhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJMb3lfQmxvb2RBbmdlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9mZDk2NTg2NTA2MjZiMWM2M2ZlOGZhNWYxMGU1YTk4MWE0MDA1MzJkZTQ1MTUzY2ZlNDgxZjMwMmQ4OTgwODE4IgogICAgfQogIH0KfQ=="); - public static final Block MAGMA_CUBE_TATER = createTaterBlock(ParticleTypes.DRIPPING_LAVA, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDA0MzAwNCwKICAicHJvZmlsZUlkIiA6ICJjMGYzYjI3YTUwMDE0YzVhYjIxZDc5ZGRlMTAxZGZlMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDEzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2IzNGEwZDA5YTI3MjFlMThhZmQzZjRjMWYyYWJmNjMwNzM0NTY2ZTVlMDQwNTRjYzA4Njk0NWRkM2FmNGExYjMiCiAgICB9CiAgfQp9"); - public static final Block MOOBLOOM_TATER = createTaterBlock(ParticleTypes.COMPOSTER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDA2MDcxNCwKICAicHJvZmlsZUlkIiA6ICJiNzVjZDRmMThkZjg0MmNlYjJhY2MxNTU5MTNiMjA0YiIsCiAgInByb2ZpbGVOYW1lIiA6ICJLcmlzdGlqb25hczEzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E1YTAyMmRhZTk2ZTQxOTI3NWEwYmY1ZGZhYmRlMmQxYzRkZDA3MzM3NmQ1MjI2NWJlZTVkZDY3Nzc2ZWU1YTIiCiAgICB9CiAgfQp9"); - public static final Block MUDDY_PIG_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDA4MjIyMSwKICAicHJvZmlsZUlkIiA6ICJiMGQ3MzJmZTAwZjc0MDdlOWU3Zjc0NjMwMWNkOThjYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJPUHBscyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MDEzN2I5MmIwN2UxYzI0YzZkMzA0MmRhYTI5OTdhODcxMzgzYzcyNzhkODhlM2VjZjE5NjRlNGI3NWZmOTkzIgogICAgfQogIH0KfQ=="); - public static final Block MUSHROOM_STEM_TATER = createTaterBlock(Blocks.MUSHROOM_STEM, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDEwMTcyOSwKICAicHJvZmlsZUlkIiA6ICIwZjczMDA3NjEyNGU0NGM3YWYxMTE1NDY5YzQ5OTY3OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJPcmVfTWluZXIxMjMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTA0ZGQzYmFkNTM3NThhZjRlYjkyYmU5MGU3ODI3N2E2MjAxZTYzZDYzNjE0YzQ2M2M1MTU2ZDIxMGE2MWMxMSIKICAgIH0KICB9Cn0="); - public static final Block NETHER_BRICK_TATER = createTaterBlock(Blocks.NETHER_BRICKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDEzMDA1OCwKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzUxNTM0MjkyYjFmNWUxM2M4Y2VhMmQ0ZjRmNjUzYzlmNDZjYjYzZjVlMmFkNDgwYzI0ZmM5OGYyMmEwMjdjMCIKICAgIH0KICB9Cn0="); - public static final Block NETHERRACK_TATER = createTaterBlock(Blocks.NETHERRACK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDE2MDEwNywKICAicHJvZmlsZUlkIiA6ICI3MzgyZGRmYmU0ODU0NTVjODI1ZjkwMGY4OGZkMzJmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJJb3lhbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83ODdmZWEzZTZjNmRhOTY5M2Q3NGIwNjA3ZDZjN2M4MDgxZGQ3NTQ1OGE1YjUyMTEwYTQ3NjFkMzA3NzUwNDBmIgogICAgfQogIH0KfQ=="); - public static final Block OAK_LOG_TATER = createTaterBlock(Blocks.OAK_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDExNzg0OCwKICAicHJvZmlsZUlkIiA6ICJlNzkzYjJjYTdhMmY0MTI2YTA5ODA5MmQ3Yzk5NDE3YiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVfSG9zdGVyX01hbiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xM2Q0YTQ5MDNiODM3NGI3OTk1NDk3NzVlMGY5ZDQ1YmJkOWIyYjIxOWVkZmY0ZDFkZGIyNjg0NzJjYTQ3YTI5IgogICAgfQogIH0KfQ=="); - public static final Block PIG_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDE5Njc4MSwKICAicHJvZmlsZUlkIiA6ICIxNzU1N2FjNTEzMWE0YTUzODAwODg3Y2E4ZTQ4YWQyNSIsCiAgInByb2ZpbGVOYW1lIiA6ICJQZW50YXRpbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81MzBhNjRiODlhOWE0NmM1ODMwMGVhZTQzNzgxNzc4OWFmYWIyNjRjMGJlMTg3YjZmMjczM2FiMjRhZGM4NDgwIgogICAgfQogIH0KfQ=="); - public static final Block POLAR_BEAR_TATER = createTaterBlock(Blocks.SNOW_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTQyMTY5MywKICAicHJvZmlsZUlkIiA6ICJhOGJhMGY1YTFmNjQ0MTgzODZkZGI3OWExZmY5ZWRlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJDcmVlcGVyOTA3NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85MmE5ZGE1NzI5MDk2MzVmMTE5YmRhYTU0MTYyOTkxZjQ0Yzk5ODEyZmEzZTUwNGZlMjMwNWUyYzgyMTBkZGYyIgogICAgfQogIH0KfQ=="); - public static final Block PUFFERTATER = createTaterBlock(ParticleTypes.DRIPPING_WATER, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5Njc4Njc0MiwKICAicHJvZmlsZUlkIiA6ICI5ZWEyMTQ0NGFiNjI0MWZkYjg5YjE2NDFhNDg2MGZiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICI3QUJDSE9VTiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS80ZDc3N2FhNDE2NDI0YjdiYjcxM2MxNTgxMTdmNzM5MmE3NGViZDFmZTQ5ZWZmNmZhMmM0YjExOTI3MjBlYjQ4IgogICAgfQogIH0KfQ=="); - public static final Block RED_MOOSHROOM_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDI0NjkxOSwKICAicHJvZmlsZUlkIiA6ICJmNThkZWJkNTlmNTA0MjIyOGY2MDIyMjExZDRjMTQwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ1bnZlbnRpdmV0YWxlbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2Y0MWQzZjY5NDhhMDhjYTEzODhiMzFjZGUyZDYyOTM2NGNjYjJhMjFhNGIyMGJmZWM2MThlYzM3NjM3ZTgwMyIKICAgIH0KICB9Cn0="); - public static final Block RED_MUSHROOM_TATER = createTaterBlock(Blocks.RED_MUSHROOM_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDI2MTg5MiwKICAicHJvZmlsZUlkIiA6ICIxYWZhZjc2NWI1ZGY0NjA3YmY3ZjY1ZGYzYWIwODhhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJMb3lfQmxvb2RBbmdlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yNzMwMTg1YTE5MzNiNmU5MGMxZDRhYjQzOWFlYWM1MTI1OWY0Mjg3MzJiNGNiMzhmY2ZlNDk4OGNiMDk5NGQxIgogICAgfQogIH0KfQ=="); - public static final Block RED_NETHER_BRICK_TATER = createTaterBlock(Blocks.RED_NETHER_BRICKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDI3Njc3NCwKICAicHJvZmlsZUlkIiA6ICJkYmQ4MDQ2M2EwMzY0Y2FjYjI3OGNhODBhMDBkZGIxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ4bG9nMjEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzA5ODZiZjlkYmEyYzA2M2MzYWZhNTY0M2E3OWE0YWRmNzM3OWUyNDliYmFlNjc4NjFhZTNlYjg5YjhiZmU5MSIKICAgIH0KICB9Cn0="); - public static final Block RED_SANDSTONE_TATER = createTaterBlock(Blocks.RED_SANDSTONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDI5NjIwNywKICAicHJvZmlsZUlkIiA6ICIwZWQ2MDFlMDhjZTM0YjRkYWUxZmI4MDljZmEwNTM5NiIsCiAgInByb2ZpbGVOYW1lIiA6ICJOZWVkTW9yZUFjY291bnRzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzU1N2EyYzk3YzkyMjVjYTcyY2MyNTA3ZjQ2NWEwZmY5NmM5NDkwMzVkOGY1M2E5NDIwZDdjZGY2Zjg3NWI4MDUiCiAgICB9CiAgfQp9"); - public static final Block RUBY_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDMxNjM0MCwKICAicHJvZmlsZUlkIiA6ICJhYjlkYmMzZjk4NGE0ZWI4YTVmY2RlYWMzNzEzZWFkMSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDeWJvcm51dDIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmVjYjFlZTk1ZmJhM2Y4NjhmYzM2YzEyNmU1OTYyMjQ0YWM0YmY2NGNkMzViMTE3ODcxZTYyNTkwYTE2NjBlZCIKICAgIH0KICB9Cn0="); - public static final Block SANDSTONE_TATER = createTaterBlock(Blocks.SANDSTONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDMzNDg4OCwKICAicHJvZmlsZUlkIiA6ICJmY2U2MjNhMDYwNWY0YzJmYTg0Zjk3Yjc3ODYwYTNjMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJQcnJpbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGVlNmE2ZTBjMzUyMWRiOWIwMjc5ZDRkNWExMWYwMDllMTk2Y2ZlNmUxZjViYWJmMWUwOWQ5OWY1YzQ4YmExMyIKICAgIH0KICB9Cn0="); - public static final Block SEA_PICKLE_TATER = createTaterBlock(ParticleTypes.UNDERWATER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDM1NDMyNywKICAicHJvZmlsZUlkIiA6ICJmMjU5MTFiOTZkZDU0MjJhYTcwNzNiOTBmOGI4MTUyMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJmYXJsb3VjaDEwMCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9lYzMyN2E4YzFkZGRkMzY3MjIzNDVjYjEyZjYyN2U5OWZkZDliNTYxNTFmMzRlMmQ0NTc5NDYyOGYwOGY2ODJhIgogICAgfQogIH0KfQ=="); - public static final Block SHEEP_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDM2ODg2MCwKICAicHJvZmlsZUlkIiA6ICJmMTkyZGU3MDUzMTQ0ODcxOTAwMjQ1MmIzZWE3MzA3NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJOZVhvU2V0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzJlMDBkYTE2NzFkZDEwN2ZhZGU5MzkyODhlOTQ0YmJmMDI2MDliMTNmMGQwZmY5ZDRlODE0NDhjZjM3YWIyNmMiCiAgICB9CiAgfQp9"); - public static final Block SHIELDED_WITHER_TATER = createTaterBlock(ParticleTypes.SOUL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDM5MDcxNCwKICAicHJvZmlsZUlkIiA6ICJhYTZhNDA5NjU4YTk0MDIwYmU3OGQwN2JkMzVlNTg5MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJiejE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzczMzFlNjVmOTE5ZDIwMDYzZGYwODZlMjQyMzM0MGZhYzZkNTk0MjA3YjUyNTYwMGQwNzc2YWVjODZmYWRiMzAiCiAgICB9CiAgfQp9"); - public static final Block SNOW_FOX_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYyOTQ1MTU4NywKICAicHJvZmlsZUlkIiA6ICIzNzNiZmY5NzQwMmY0N2IzOTViOTZlNzc3NmNmOGFhMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdXRlcGluazczIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2JkMWQ0NzNlM2U4MmQwYWZjYTBmNzU2ODc0OGYwZmY2MzczMzQ2MzJjZmI1ZjZhYzIyODUzM2ZhZGY5YmJiZjUiCiAgICB9CiAgfQp9"); - public static final Block SPIDER_TATER = createTaterBlock(Items.SPIDER_EYE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDQyNjk5NywKICAicHJvZmlsZUlkIiA6ICJjMTNkYzkxZjg1YjA0ZWM4OGU2NDk5YzdjZDc4Zjk3MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJjcnlwdGljX2Zyb2dfIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzhjNzExYWUyMjZiMGU4NDgwNmU5Mzk4NmFkMTc1ZTg1NWUwN2Q4YjIzYzJmYzM2OTU5NjU0OWY1NzFjNzM5ZjAiCiAgICB9CiAgfQp9"); - public static final Block SPRUCE_LOG_TATER = createTaterBlock(Blocks.SPRUCE_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDEzNDQ3NywKICAicHJvZmlsZUlkIiA6ICI4MmM2MDZjNWM2NTI0Yjc5OGI5MWExMmQzYTYxNjk3NyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3ROb3RvcmlvdXNOZW1vIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg3YTgyMGNkYWQ2NjRjZjU0Zjk4ZTM2ZjcwYzkyNTkyYzU4NGM4YTU4NjAwM2ViNmViZmNmZjJmOTNjZGEwZGMiCiAgICB9CiAgfQp9"); - public static final Block SQUID_TATER = createTaterBlock(ParticleTypes.SQUID_INK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDQ2MDg4NywKICAicHJvZmlsZUlkIiA6ICJiYjdjY2E3MTA0MzQ0NDEyOGQzMDg5ZTEzYmRmYWI1OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJsYXVyZW5jaW8zMDMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTg5NmRkMTk0ZGYwMGFhMGY0ODQ3NGRjNzVjOWJiNDVmYTc4MTNhZTUwZTQyYzRhNjlmMDhjMmQxYjNjNDc1OSIKICAgIH0KICB9Cn0="); - public static final Block STRAY_TATER = createTaterBlock(Blocks.BONE_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDQ4MTM1MiwKICAicHJvZmlsZUlkIiA6ICIzMzg1ZjI1MTRjMmU0OGI0OTlmYjJlODFlMTVlM2QxYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVJbmRpZURhdiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yZDc5NTJhYzQxZTZkYWZjZDNhZGVhYWQ2NTY3MjhhMDY1OTljZmE1MTczMDg1ZDQyY2E0ZmNkZjhmYjc2YzQ0IgogICAgfQogIH0KfQ=="); - public static final Block STRIDER_TATER = createTaterBlock(ParticleTypes.LAVA, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDUwNDQ3OCwKICAicHJvZmlsZUlkIiA6ICJlMmVkYTM1YjMzZGU0M2UxOTVhZmRkNDgxNzQ4ZDlhOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDaGFsa19SaWNlR0kiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzMwYzY0ZDE0NjAxOTBmMDUxNjlhOWY2ZDEyOTJiMjk4YzdmZjk2NzMwODNhZWQwYTIyYTIyMTE1M2EwZjUxOSIKICAgIH0KICB9Cn0="); - public static final Block TURTLE_EGG_TATER = createTaterBlock(Blocks.TURTLE_EGG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDUyMjczMiwKICAicHJvZmlsZUlkIiA6ICI0NGNlMmMwZTFjNTM0ZDhmYmExNmNkNDhlYjkyYTUxZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJ4WGlyYW56dThYeCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83ZTcwNTQ0MDM1NTIwOTBlNjBiYjVmNDAyNWUwNmY1YmZiNTEzYzk4OWE1ZTg3YWQ4OGNmZTQ2ODEyOWVkN2YxIgogICAgfQogIH0KfQ=="); - public static final Block WARPED_NYLIUM_TATER = createTaterBlock(ParticleTypes.WARPED_SPORE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDUzODg0OCwKICAicHJvZmlsZUlkIiA6ICI3NTE0NDQ4MTkxZTY0NTQ2OGM5NzM5YTZlMzk1N2JlYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGFua3NNb2phbmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM4MDIwNjE0M2Q4ZTc2Y2VlMzFhZGY4YWU2NGJhNGM2N2Q2MzM1YWJmMTIzZjRlYjk3M2NmMzAyZjZjYTJjZiIKICAgIH0KICB9Cn0="); - public static final Block WARPED_STEM_TATER = createTaterBlock(Blocks.WARPED_STEM, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzYzMDE1NDYzMiwKICAicHJvZmlsZUlkIiA6ICIzOWEzOTMzZWE4MjU0OGU3ODQwNzQ1YzBjNGY3MjU2ZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkZW1pbmVjcmFmdGVybG9sIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzJlNDcxZWFkZDFkODE5NWJkNTU4NGUxZTI2NmJhNGM3MTQ4Yzk2OGZiMTczNzM1YzRhNjk3NWI1OTA3NTZhZiIKICAgIH0KICB9Cn0="); - public static final Block WITHER_TATER = createTaterBlock(ParticleTypes.SOUL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzU3MDU3MzA1MCwKICAicHJvZmlsZUlkIiA6ICIzNzNiZmY5NzQwMmY0N2IzOTViOTZlNzc3NmNmOGFhMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdXRlcGluazczIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzcxMzQ2NTk4YWRhMWRmN2Y4YmMyN2RkZTRhZjg5NWRiMTY1NWY1ZDNkMWI3ZDVkNDgzMTU1NmZlYjg0ZGRjYTgiCiAgICB9CiAgfQp9"); - - public static final Block AZALEA_TATER = createTaterBlock(Blocks.AZALEA_LEAVES, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTM5ODQwMiwKICAicHJvZmlsZUlkIiA6ICIwNjNhMTc2Y2RkMTU0ODRiYjU1MjRhNjQyMGM1YjdhNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZpcGF0dXJ5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2RjODM2NjQxZWNiNDBlNzc1Zjg1ZjRjNzFiMjE5MTIwZTQzMDgwZTAzYjhjODRhN2Y2MGYxYmE4MTI3ZjI5MzEiCiAgICB9CiAgfQp9"); - public static final Block BELL_TATER = createBellTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTQxMTQ4OCwKICAicHJvZmlsZUlkIiA6ICI0NDAzZGM1NDc1YmM0YjE1YTU0OGNmZGE2YjBlYjdkOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJDaGFvc0NvbXB1dHJDbHViIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E4NGI3MjZhNzViODEzOTNlMjA2YzE5Y2E1MDg1NzBhOGE4ZGI2NGY4OGI5MDc3NWViNDUxMjE0YWIwZDc1NjEiCiAgICB9CiAgfQp9"); - public static final Block COLD_FROG_TATER = createTaterBlock(ParticleTypes.SPLASH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTQyNzc2NiwKICAicHJvZmlsZUlkIiA6ICI0Mzk0NGU5NWZiNjI0NmJiOGIyYmQ5NDZlNWY5YjhhMCIsCiAgInByb2ZpbGVOYW1lIiA6ICJCbGFja0NvdWxkIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Y1OGY4NjdiYjVmNTcwYzdjYTlhZmE5N2E2OThhM2VhMjJiNjIxOGEwNDQ1OTU4ZGM4YmFjZGI1Mzk3NmRhMmUiCiAgICB9CiAgfQp9"); - public static final Block CONDUIT_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTQ0NTc3OCwKICAicHJvZmlsZUlkIiA6ICI0MGNhN2RiMGRlMDc0YmMwOGUxYjUzZTY2ZmY1ZjQxNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJIY3JlYW02OSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jNTlkOTBmZmJhNGRlYmFjYzdmOGNiNDAwYzQwZTM2ZTE1OTAyMTY2Y2Q1NTQ0YmFhYzVmYmJiODMwYTFjNThjIgogICAgfQogIH0KfQ=="); - public static final Block ELDER_GUARDIAN_TATER = createElderGuardianParticleTaterBlock("ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTQ2MTI3MiwKICAicHJvZmlsZUlkIiA6ICI3NzI3ZDM1NjY5Zjk0MTUxODAyM2Q2MmM2ODE3NTkxOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJsaWJyYXJ5ZnJlYWsiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzg2ZjkwZjM4OTU5YzU2NTJjZTNiZDI4NDBiZGIxODAzNmQzMTUzZjYyODRlMTJhZjA3ZjAwMDY2M2M1MzZmZSIKICAgIH0KICB9Cn0="); - public static final Block END_STONE_BRICK_TATER = createTaterBlock(ParticleTypes.END_ROD, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTQ3NzYzOSwKICAicHJvZmlsZUlkIiA6ICI0NmY3N2NjNmQ2MjU0NjEzYjc2NmYyZDRmMDM2MzZhNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNaXNzV29sZiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81YzBhOTQ4M2QyYjQzYzI4NGRjOGFiZDYxNDkzNDJkYzYzMTM2ZjNiYjIwODQ3NmUxN2Y0MzQwNTllY2U0NTgyIgogICAgfQogIH0KfQ=="); - public static final Block FLOWER_POT_TATER = createTaterBlock(ParticleTypes.COMPOSTER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTQ5NDEwMiwKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTM3OGIxODA0YWYwODc1Y2IwMGZkMzUwZTYxMTZiZmQyMTY1ZGIyMDllZDhiOGUwYzQ4Zjk4NDY2OTU1M2Y0NSIKICAgIH0KICB9Cn0="); - public static final Block GUARDIAN_TATER = createTaterBlock(Blocks.PRISMARINE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTUxMDcxMSwKICAicHJvZmlsZUlkIiA6ICI2MTZiODhkNDMwNzM0ZTM3OWM3NDc1ODdlZTJkNzlmZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZWxseUZpbiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jMTUyZGY2ODc1ODg2ZjI5YTBmMWYxMTBjMmE1NDgyMDI0OGNlZWY2ODhmZTE1MDc5N2RkZTRlOWQ0ODYzYzBlIgogICAgfQogIH0KfQ=="); - public static final Block ILLAGER_TATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTUzMTI4NiwKICAicHJvZmlsZUlkIiA6ICJjNDM5NDI3Y2U1NGQ0NDMwYTYzOGU5OTdlYzc2YTBhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVNYXN0ZXJHb2xkZW4iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTIyYzExOTBmYjU2MWYxZGZjOTk0YjI4MWViMTQ1OTU1ZTJlNDM5NTExYzgzYWFmNjRmZWQxYWIwOWVjMTMxNiIKICAgIH0KICB9Cn0="); - public static final Block ILLUSIONER_TATER = createTaterBlock(ParticleTypes.ENTITY_EFFECT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY1MjY4MDU5OSwKICAicHJvZmlsZUlkIiA6ICJjNzQ1Mzc4MDY5MzY0ODg2ODkwNzRkOTQ3ZjBlOTlmNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdWN1bWkwNyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82YzMxYjk4MGEwMjg0N2Q1YWM5NDg2NjNlOTU2MDRlNzU0ZTBiNzM2ZDQ1OTNjNzg0MTMzMjgzMzE0NGYyNzgyIgogICAgfQogIH0KfQ=="); - public static final Block JUKEBOX_TATER = createTaterBlock(ParticleTypes.NOTE, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTU2MzY4NSwKICAicHJvZmlsZUlkIiA6ICI0ZjU2ZTg2ODk2OGU0ZWEwYmNjM2M2NzRlNzQ3ODdjOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE1IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzc1ZjZmNjFlM2E5MDM1YTc1ODE3NDk3OWNhNjY0YjI2ZTQ3Y2E5YjI3M2YzMjRmMDkyMWI1YWQ1OGJkYjU4MzUiCiAgICB9CiAgfQp9"); - public static final Block LANTERN_TATER = createTaterBlock(ParticleTypes.FLASH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTU3OTU1NiwKICAicHJvZmlsZUlkIiA6ICIzM2ViZDMyYmIzMzk0YWQ5YWM2NzBjOTZjNTQ5YmE3ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEYW5ub0JhbmFubm9YRCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xNmMyNzVmNjU3YmFjMTM2MzMzM2FiZjFkYjBkMThiZmFiZjA4N2ZiZjNkZjM1NmVjN2Y0MTI1OGJjMTZiNzZkIgogICAgfQogIH0KfQ==", 20); - public static final Block PIGLIN_TATER = createTaterBlock(Blocks.GOLD_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTYwODE4OCwKICAicHJvZmlsZUlkIiA6ICIyM2YxYTU5ZjQ2OWI0M2RkYmRiNTM3YmZlYzEwNDcxZiIsCiAgInByb2ZpbGVOYW1lIiA6ICIyODA3IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzRkZjYyOTBhYzFhZmY4YjE3OTQyMGYyYTA1YmFhM2M3MjFhNWNmNDlmM2JkOGY5OTI4YTBhNTdjMGNmMzY5ZSIKICAgIH0KICB9Cn0="); - public static final Block PINK_WITHER_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTYyODk0MywKICAicHJvZmlsZUlkIiA6ICJmMTYwZTMxMzJjYWM0YjRiOWM5OTk2NDQ1OGIxOWM0ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJUb255S3VuIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzkzNTkyMzIzZGJjZTllZWM5MzNhYTkxNWFmNzE3MDFiNzdlZTQ3OGY3ZTFkZDEyNjUwMWEwMjdiMWQ0MzBiYzciCiAgICB9CiAgfQp9"); - public static final Block PISTON_TATER = createTaterBlock(Blocks.PISTON, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTY0NDY5NSwKICAicHJvZmlsZUlkIiA6ICJlNzkzYjJjYTdhMmY0MTI2YTA5ODA5MmQ3Yzk5NDE3YiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVfSG9zdGVyX01hbiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS84NGE1MDgxNDQ0YmIxM2NmNzViYzgwNDAwMjBlOTFmMzllMDU2Y2YyNzNjZDhlYmU1MjhlMDkxMDBhMTgzZTUzIgogICAgfQogIH0KfQ=="); - public static final Block PURPUR_TATER = createTaterBlock(ParticleTypes.END_ROD, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTY1ODk2NCwKICAicHJvZmlsZUlkIiA6ICIzNzNiZmY5NzQwMmY0N2IzOTViOTZlNzc3NmNmOGFhMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdXRlcGluazczIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzljNjE5ZTU1ZDYwNTc5ZTIxMTI2YTVjMGI4OGZkOGI4YmFhOThkMjRkMTI5OWVkMTUxNWZhMTQ1MmY2YWI4OTgiCiAgICB9CiAgfQp9"); - public static final Block SOUL_LANTERN_TATER = createTaterBlock(ParticleTypes.SOUL_FIRE_FLAME, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTY3MzI0MywKICAicHJvZmlsZUlkIiA6ICI0OWIzODUyNDdhMWY0NTM3YjBmN2MwZTFmMTVjMTc2NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJiY2QyMDMzYzYzZWM0YmY4IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5NDE5Y2ViZDE1ZWJjNzlmZThlYmE2OTg0NjM3ZjNjMjg5MmU2ZDY4ZmNjNGNhYTBmMzQ5OWNmZGRlYzI1Y2UiCiAgICB9CiAgfQp9"); - public static final Block SOUL_SOIL_TATER = createTaterBlock(ParticleTypes.SOUL, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTcwNDUyMCwKICAicHJvZmlsZUlkIiA6ICI0ZTMwZjUwZTdiYWU0M2YzYWZkMmE3NDUyY2ViZTI5YyIsCiAgInByb2ZpbGVOYW1lIiA6ICJfdG9tYXRvel8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzQ1ZWI1Njk5ZjBmYWZhYTZkOGUzMzIyN2UyZTYyNmRlZjUyMDU0NTM5MmRmZmJmYTZhMDcxZmVlYzIzOTA0OSIKICAgIH0KICB9Cn0="); - public static final Block STICKY_PISTON_TATER = createTaterBlock(Blocks.SLIME_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTcyMTU2NiwKICAicHJvZmlsZUlkIiA6ICJlZDUzZGQ4MTRmOWQ0YTNjYjRlYjY1MWRjYmE3N2U2NiIsCiAgInByb2ZpbGVOYW1lIiA6ICI0MTQxNDE0MWgiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDA0NzM1YmU5ZDNlMGRlYTljZWMzZDRhMDM1ZmE0YjA2NjhiMGE3ZTc5Y2FmZWNiODBkZWNiYTAyYWNlMjQ1MSIKICAgIH0KICB9Cn0="); - public static final Block TEMPERATE_FROG_TATER = createTaterBlock(ParticleTypes.SPLASH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTczODk1NiwKICAicHJvZmlsZUlkIiA6ICIxN2Q0ODA1ZDRmMTA0YTA5OWRiYzJmNzYzMDNjYmRkZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJnaWZ0bWV0b25uZXMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTJkZDU2ZWU4ZjcwYzZiYmIwZmI0M2VkODc1MDcxYjFlZDRhNGE4MTMwY2I0ZjhkZDE3ODY5ZTEzOTViZWI0ZSIKICAgIH0KICB9Cn0="); - public static final Block UNDERWATER_TNTATER = createTaterBlock(ParticleTypes.EXPLOSION, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTc1NTM5NSwKICAicHJvZmlsZUlkIiA6ICIwODFiZTAxZmZlMmU0ODMyODI3MDIwMjBlNmI1M2ExNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJMeXJpY1BsYXRlMjUyNDIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmQ5MDcxNmFjZDRkZDY0M2JlZjcxYTg0ZTQ0YmM1Y2I3NWVjOGFiMjYwOTg2ZGQ2Nzk0NTI3NzhjODBmODQ5NiIKICAgIH0KICB9Cn0=", 10); - public static final Block VEX_TATER = createTaterBlock(ParticleTypes.ENCHANTED_HIT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTc3MzIwMSwKICAicHJvZmlsZUlkIiA6ICI3NTA5NzZmODRmMDE0NWFhYTc0MzAwYWJhMzc5MTIzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICIwY2hlYXRzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzlmMTVkY2JlMGJkZTlmNjEzMTQ2YmE0ZDUxZDU0NDhlYWY4MGQyNjBiZGIzMjNkMjM1ODM3MWU4YzNkNTA4MjkiCiAgICB9CiAgfQp9"); - public static final Block VILLAGER_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTc5MTQxNSwKICAicHJvZmlsZUlkIiA6ICJkYmQ4MDQ2M2EwMzY0Y2FjYjI3OGNhODBhMDBkZGIxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ4bG9nMjEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2MzNGY4MWI3NDg1NWI5YzZhMmRhMGE5MDAwMDM5ODcxYTE3NjMxOTc2YzlmOWQwODUwYWUzMGUzMWI5ODM5NyIKICAgIH0KICB9Cn0="); - public static final Block VINDITATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTgxMTA1OCwKICAicHJvZmlsZUlkIiA6ICJmNThkZWJkNTlmNTA0MjIyOGY2MDIyMjExZDRjMTQwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ1bnZlbnRpdmV0YWxlbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWNhNWYxMDY5YzMzOTllYTNlZGEwMTRiOWRjNWFhYzM4MjcxMTZlZDkzNjE3YmI0NGJhODc3MTdiMTFmZjk4YSIKICAgIH0KICB9Cn0="); - public static final Block WANDERING_TRADER_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTgyNzUwOCwKICAicHJvZmlsZUlkIiA6ICJmMTA0NzMxZjljYTU0NmI0OTkzNjM4NTlkZWY5N2NjNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJ6aWFkODciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODYwNTkyZmM1Mzg1Zjc0ZmZlOGMzZTNlOWYxYWQxNmE1YTg2NWJjZmEzMzY5NzQ4M2ZmN2E1ZGEzYTc4NDM5MiIKICAgIH0KICB9Cn0="); - public static final Block WARM_FROG_TATER = createTaterBlock(ParticleTypes.SPLASH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTg0NDk0MywKICAicHJvZmlsZUlkIiA6ICJjNTlkMDFlMDI4MWI0MGNhOTczNjc5ODc4NmRmN2FmNiIsCiAgInByb2ZpbGVOYW1lIiA6ICJvWm9va3hQYXJjY2VyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdlYTlkZTM3MWJhNGEzZWRmZTgyNjBhNTU5YzdjYzI1NTY0ZDJjZGJiNzA5N2QwZDM1NzU5MDhhOGI2MjdmMTAiCiAgICB9CiAgfQp9"); - public static final Block WAX_TATER = createTaterBlock(ParticleTypes.LANDING_HONEY, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTg2Mzk0MCwKICAicHJvZmlsZUlkIiA6ICIxNzhmMTJkYWMzNTQ0ZjRhYjExNzkyZDc1MDkzY2JmYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJzaWxlbnRkZXRydWN0aW9uIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2FjYzM5MDQ1YTlmMDcyYTNhZGNlOTFmN2RkNzVjZTIzODVjZjZjOGMyNTFhZGI1ZDdlOThhZTk5OWFlODE3NzciCiAgICB9CiAgfQp9"); - public static final Block WITCH_TATER = createTaterBlock(ParticleTypes.ENTITY_EFFECT, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0ODExMjg5OCwKICAicHJvZmlsZUlkIiA6ICJiYjdjY2E3MTA0MzQ0NDEyOGQzMDg5ZTEzYmRmYWI1OSIsCiAgInByb2ZpbGVOYW1lIiA6ICJsYXVyZW5jaW8zMDMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWEwMmM0MmRiMjZiZGEyMzE1MTM5MjRmOTE2YzFhMzdhYmU4OTI1NWFiM2NiNzdkN2RhOTU0NjkwNTI5MTdmMyIKICAgIH0KICB9Cn0="); - public static final Block ZOMBIE_VILLAGER_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTg3OTAzNSwKICAicHJvZmlsZUlkIiA6ICI3NzI3ZDM1NjY5Zjk0MTUxODAyM2Q2MmM2ODE3NTkxOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJsaWJyYXJ5ZnJlYWsiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2UzN2ZlN2FiZjllZTc4ZGUyODg5OTkzZTI0ZDNmYzc3ODQyNjlmMDNhZTY1ZGEyZDhhYjdhNTllMGQxNTE2ZiIKICAgIH0KICB9Cn0="); - public static final Block ZOMBIFIED_PIGLIN_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzY0MTg5NTk5MSwKICAicHJvZmlsZUlkIiA6ICI3MzgyZGRmYmU0ODU0NTVjODI1ZjkwMGY4OGZkMzJmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJJb3lhbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yNDhiMmE2OTczYmJlYjFhM2U0OGM4ZTBiNjk1ZDczM2Q1YTRlMjUyNzJhNjM5ZDI0OGQ4OWNmNDEyOWNjMmU5IgogICAgfQogIH0KfQ=="); - - public static final Block BONE_SPIDER_TATER = createTaterBlock(Blocks.BONE_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzM5NjY5NCwKICAicHJvZmlsZUlkIiA6ICI2MzMyMDgwZTY3YTI0Y2MxYjE3ZGJhNzZmM2MwMGYxZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUZWFtSHlkcmEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGNkZTBiMjU0Y2Y3ZDBlOGExNzBjNjY3ZGU2MjFjNDE0ZTc0NzVlMDZkYWZhOGFkYTg2ODIyNGEyZmE3YTI5YiIKICAgIH0KICB9Cn0="); - public static final Block BOULDERING_ZOMBIE_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzQzMDE0OCwKICAicHJvZmlsZUlkIiA6ICIzZmM3ZmRmOTM5NjM0YzQxOTExOTliYTNmN2NjM2ZlZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJZZWxlaGEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2E1NTJjOGY2OGNkOGU0NmJkNDkzZTc3YTE3MjZkN2UwM2E0NjBmYzg5ZWM4MGQyNzM0OTk1MjFjZjk4MzFmMCIKICAgIH0KICB9Cn0="); - public static final Block CHARGED_CREEPER_TATER = createTaterBlock(ParticleTypes.EXPLOSION, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzQ0NjU1MSwKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTYxMzQwMzRlNmQyNGY1ZjcyMzE3MWRlMjQyOGM5MjEwNmNkMjYxZDMyOWQ5NjUxOTVhOTA2NWZmNTM3OGIwMCIKICAgIH0KICB9Cn0=", 10); - public static final Block LOBBER_ZOMBIE_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzQ2Nzg4OCwKICAicHJvZmlsZUlkIiA6ICJjNDM5NDI3Y2U1NGQ0NDMwYTYzOGU5OTdlYzc2YTBhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVNYXN0ZXJHb2xkZW4iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDE3OGE1YTY1OWEyNDU5MDBmYmRjNDY4ZjRkNDIxYzM0ZmEwZDFjN2UwZmYxZjQ3YmU5ZGU1ODA2NDgwMzVmZSIKICAgIH0KICB9Cn0="); - public static final Block MOSSY_SKELETATER = createTaterBlock(Blocks.MOSS_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzQ4Nzk1NCwKICAicHJvZmlsZUlkIiA6ICIxYWZhZjc2NWI1ZGY0NjA3YmY3ZjY1ZGYzYWIwODhhOCIsCiAgInByb2ZpbGVOYW1lIiA6ICJMb3lfQmxvb2RBbmdlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85YzA3MjQyMzMyYTBiNWM4NWY2OWY2MjZiODNhMjhiZWE5M2E0MWM1MWY3YzVjMWM5YmNhZGVhNmVhN2Y2ODk1IgogICAgfQogIH0KfQ=="); - public static final Block STRIPPED_ACACIA_LOG_TATER = createTaterBlock(Blocks.STRIPPED_ACACIA_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzUwNjIyOCwKICAicHJvZmlsZUlkIiA6ICI3NTE0NDQ4MTkxZTY0NTQ2OGM5NzM5YTZlMzk1N2JlYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGFua3NNb2phbmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWFjOTllOTUyZTZmNWU0MjA2NjEzOWZhNjkyMTc5ZjIzZDMzMjgxNTIxZDY1OTAxMDc5ZTQwM2E1MmVkZDQzMCIKICAgIH0KICB9Cn0="); - public static final Block STRIPPED_BIRCH_LOG_TATER = createTaterBlock(Blocks.STRIPPED_BIRCH_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzU0NzEyOSwKICAicHJvZmlsZUlkIiA6ICIyNzZlMDQ2YjI0MDM0M2VkOTk2NmU0OTRlN2U2Y2IzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBRFJBTlM3MTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjY3ZTM0NzA0ZGE2M2Q2YmE0ZjNjOTFmYzlhYWIxMWI1ZWZjMzZlMGY4MjNkNGQ5Yzg0ZWYwMjExNDk1ODVjNCIKICAgIH0KICB9Cn0="); - public static final Block STRIPPED_CRIMSON_STEM_TATER = createTaterBlock(Blocks.STRIPPED_CRIMSON_STEM, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzU3ODMzMywKICAicHJvZmlsZUlkIiA6ICI2OTBkMDM2OGM2NTE0OGM5ODZjMzEwN2FjMmRjNjFlYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ5emZyXzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmY3MDJiZjVmYjhhNjcyZmQ4OTY5NmEwYTA5OTk5ZGIwNmIyMmNkYzRhMTc1ZmQ1MzY2OTE2ZDg0Mjk3ZGE4MiIKICAgIH0KICB9Cn0="); - public static final Block STRIPPED_DARK_OAK_LOG_TATER = createTaterBlock(Blocks.STRIPPED_DARK_OAK_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzU5NTE3OCwKICAicHJvZmlsZUlkIiA6ICI2NDU4Mjc0MjEyNDg0MDY0YTRkMDBlNDdjZWM4ZjcyZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaDNtMXMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDM5YjA5NDQ5MDc2YzU4YTkxMWQ0NjQyNTZjMjlkZDVkNjM0ODUyMjg3NjMwYzA1ZjFjM2M4MmE0MzY4Y2U2MiIKICAgIH0KICB9Cn0="); - public static final Block STRIPPED_JUNGLE_LOG_TATER = createTaterBlock(Blocks.STRIPPED_JUNGLE_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzYxMzQxNiwKICAicHJvZmlsZUlkIiA6ICI2MTZiODhkNDMwNzM0ZTM3OWM3NDc1ODdlZTJkNzlmZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJKZWxseUZpbiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xZTgxMTAzNGVlMTYzMWU3ZjU2MGZmMzViNmJkYjVlMGI0NjBiNTU5ZDc5OTc0MGFjNTlkMGUyZDJjMGJiOWU5IgogICAgfQogIH0KfQ=="); - public static final Block STRIPPED_OAK_LOG_TATER = createTaterBlock(Blocks.STRIPPED_OAK_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzYzMjk1MiwKICAicHJvZmlsZUlkIiA6ICJiNjc3NTgwYzExYmU0ZjNiODI1OGM0YjBkNzNhNzg0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJPZmZpY2lhbGx5SksiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2NmN2NmYzY3NjNiYTg3NzgxZjFkZTdmNzZlYzVhMjY0MzZjMTRhNzRiMTI5MmY3ZDI0MDlmMzk5ZGQ3Mjc3MyIKICAgIH0KICB9Cn0="); - public static final Block STRIPPED_SPRUCE_LOG_TATER = createTaterBlock(Blocks.STRIPPED_SPRUCE_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzY0OTU0MywKICAicHJvZmlsZUlkIiA6ICI1YjY2YzNkZWZhYTI0NWMzYTcwNjM3OTA3NTQ0Yjg3MCIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZWFuX1JhaWNvMDgxNiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83YTFmMDQ3YjJkNjFiMTRlNzE3ZjZjNDJmNjdhZjVkYTFkMTAxZDBhMzczNDBjNmU0OTdmM2UzYWYxZDYyNjkxIgogICAgfQogIH0KfQ=="); - public static final Block STRIPPED_WARPED_STEM_TATER = createTaterBlock(Blocks.STRIPPED_WARPED_STEM, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzY2NDY4NywKICAicHJvZmlsZUlkIiA6ICIzNzNiZmY5NzQwMmY0N2IzOTViOTZlNzc3NmNmOGFhMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJjdXRlcGluazczIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzU0NDUzNDQ3ZGZjNjI4NzkzZTFjNzA0NTA5ZmQyNGRkM2VmZmNhZmY5Y2U2YWJhMTZlZmJlZTNhMTAwMWQ2NWYiCiAgICB9CiAgfQp9"); - public static final Block TROPICAL_SLIME_TATER = createTaterBlock(ParticleTypes.FISHING, "ewogICJ0aW1lc3RhbXAiIDogMTY0MzgwNzY4MDk5NiwKICAicHJvZmlsZUlkIiA6ICIzYTNmNzhkZmExZjQ0OTllYjE5NjlmYzlkOTEwZGYwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb19jcmVyYXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDczZDdmZmVlYjk1NjJlMWMwZmU1OWFjNDVkYmVjMzcwNzUwNzkzY2Q2YWNiZDAxZTI2YzNhMDJjZWE3N2ZlYSIKICAgIH0KICB9Cn0="); - - public static final Block APPLE_TATER = createTaterBlock(Items.APPLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5NjcwNTIxMCwKICAicHJvZmlsZUlkIiA6ICIwMGZiNTRiOWI4NDA0YTA0YTViMmJhMzBlYzBlYTAxMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJrbGxveWQ3MCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zNzllNmM5NmE5MDdmY2U2MGU4YzBjNTViMDJiNTU0NjYzZTUwZjZkZmY5ZWVlMTEzZTM3NDJmODc3OWMwMzA0IgogICAgfQogIH0KfQ=="); - public static final Block GOLDEN_APPLE_TATER = createTaterBlock(Items.GOLDEN_APPLE, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5NjcyMjAyMCwKICAicHJvZmlsZUlkIiA6ICJjZjU0YTA5NmZlMjE0MDNlYjNmMmI5YTJiMjIyMzU2NiIsCiAgInByb2ZpbGVOYW1lIiA6ICJDaW5uYXJvbl8iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjdhNDdjZmY2MDVmYjkzNmJiODI2MTA5YmIyYjVlNzdkYzMyMTBlMjExZjJmNTNjODQ3MGNmOGVkMmM4MDQ3NiIKICAgIH0KICB9Cn0="); - public static final Block ICE_TATER = createTaterBlock(Blocks.ICE, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5Njc0MTAzNCwKICAicHJvZmlsZUlkIiA6ICJhYzIzZmEzNzRhMmM0YjU2YmYzYzU2ZTVhODY3NjIzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJxdWVlbnNoYW5pd2EiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmM4OWE5NDdkNGZkMzg1NDE4ZjMzNTJmMjEzN2JhZTM5MGNiZGY5NmQ1ZmI0NzliNTlhOTcwMjlmMzRlMTQ2MSIKICAgIH0KICB9Cn0="); - public static final Block KING_TATER = createTaterBlock(ParticleTypes.TOTEM_OF_UNDYING, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5NzI3NjQ4OCwKICAicHJvZmlsZUlkIiA6ICJmNThkZWJkNTlmNTA0MjIyOGY2MDIyMjExZDRjMTQwYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ1bnZlbnRpdmV0YWxlbnQiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjhiN2ZjNDE2ZGU1ZDhhMGYxYjZmNmE3MjM0ZTY3ODlmYjQ2ZmVkMzU4NTIyZmU5MGRhOGY5MmNlYWZlZWEzYiIKICAgIH0KICB9Cn0="); - public static final Block RAW_COPPER_TATER = createTaterBlock(Blocks.RAW_COPPER_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5NjgxNjg0MywKICAicHJvZmlsZUlkIiA6ICIzMzg1ZjI1MTRjMmU0OGI0OTlmYjJlODFlMTVlM2QxYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGVJbmRpZURhdiIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9lMDJkMjYzNTEwYjM0NDk4Yzg4MTRiMTFjOGRlZWZiNzU0ZDY0N2M0NDQ0ZGI2MTUyN2I2MDBhODhiNTY2MjA0IgogICAgfQogIH0KfQ=="); - public static final Block RAW_GOLD_TATER = createTaterBlock(Blocks.RAW_GOLD_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5NjgzMjUxNCwKICAicHJvZmlsZUlkIiA6ICJjYmFkZmRmNTRkZTM0N2UwODQ3MjUyMDIyYTFkNGRkZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJmaXdpcGVlIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2M5Y2YzNWU5MjhjM2I5NGEyOWE2MDQ5NDE0Y2Q0MTFiZDIyM2RhM2RkMjMyYjdhNmJiYjM0ZmJmMzdlNWRiNTMiCiAgICB9CiAgfQp9"); - public static final Block RAW_IRON_TATER = createTaterBlock(Blocks.RAW_IRON_BLOCK, "ewogICJ0aW1lc3RhbXAiIDogMTY0NTU5Njg1MTc5MywKICAicHJvZmlsZUlkIiA6ICI0M2NmNWJkNjUyMDM0YzU5ODVjMDIwYWI3NDE0OGQxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJrYW1pbDQ0NSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81MGQxOWUyZTY2OGU0YzYzMjliMTQ5MWM0M2E3NWU4YjQ4NGZhNWVmODM0ZmYzYmFjZGI1NmZjYzJkNDljMjM1IgogICAgfQogIH0KfQ=="); - - public static final Block ALLAY_TATER = createTaterBlock(ParticleTypes.HEART, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1MDc2MjY2NiwKICAicHJvZmlsZUlkIiA6ICJjZGM5MzQ0NDAzODM0ZDdkYmRmOWUyMmVjZmM5MzBiZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXdMb2JzdGVycyIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zNjkxMWI5OTg1OWM2NjI3Y2JhNzEwMDQxYTdjZTRhYjE3NzkxZTVjOTI3OGE4NWM3NWMxNTk2ZGQxYzc4OWJiIgogICAgfQogIH0KfQ=="); - public static final Block MANGROVE_LOG_TATER = createTaterBlock(Blocks.SPRUCE_LOG, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1MDc4MTQwOCwKICAicHJvZmlsZUlkIiA6ICIyNzZlMDQ2YjI0MDM0M2VkOTk2NmU0OTRlN2U2Y2IzNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBRFJBTlM3MTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmFiMDY1NGEyMzg0NjJlOGYxNzQ2NDMxZDA1ZGZkMTNkOTUyNjAwMzFhZmUzMzViNjk2ZmVhYTZiYjQ5ZDY3OCIKICAgIH0KICB9Cn0="); - public static final Block MANGROVE_TATER = createTaterBlock(Blocks.CRIMSON_PLANKS, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1MDc5OTE2MiwKICAicHJvZmlsZUlkIiA6ICJhYTZhNDA5NjU4YTk0MDIwYmU3OGQwN2JkMzVlNTg5MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJiejE0IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzQyY2NkNzlhYWJiYjQ3YWU5YmRiNmIwMGFkOWY0M2U2NWQwOThjYzI3Y2FhM2EyY2Q4ZDk0YjI4M2Y3MjY0NjQiCiAgICB9CiAgfQp9"); - public static final Block MUD_BRICK_TATER = createTaterBlock(Blocks.TERRACOTTA, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1MDgxOTAwMCwKICAicHJvZmlsZUlkIiA6ICI1ODkwNjAyNDYyMzE0ZGFjODM0NWQ3YjI4MmExZDI4ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJXeW5uY3JhZnRHYW1pbmciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTM3NTU1ZDg5MGY5MDVlNzIwODM4NDRjYTc1MWE2NjFkODRlZDU5OWFjNjQ5ZGMzODIxNzRhZjIxODBiYTEyIgogICAgfQogIH0KfQ=="); - public static final Block MUD_TATER = createTaterBlock(Blocks.STONE, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1MDg0MzQ4MSwKICAicHJvZmlsZUlkIiA6ICJkYmQ4MDQ2M2EwMzY0Y2FjYjI3OGNhODBhMDBkZGIxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ4bG9nMjEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjgzNTYxYzI1M2Y4MzdjMDc3ZDllNTM5NGY3MTE2NzIyMGY5OTY2YWFmZTFkNTlhODdjYWFjYmQwYTNlNDgxNCIKICAgIH0KICB9Cn0="); - public static final Block PACKED_MUD_TATER = createTaterBlock(Blocks.DIRT, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1NDgwOTk3NiwKICAicHJvZmlsZUlkIiA6ICI5MThhMDI5NTU5ZGQ0Y2U2YjE2ZjdhNWQ1M2VmYjQxMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCZWV2ZWxvcGVyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzY3YTU5MTEwNjFjOTQ5N2MxZTg4OGFhYmU5NzM3MGQ0ZDAwZjkwMGNhNzk4Y2IxYWM4Y2Y0MWZlN2JiNDE1MzIiCiAgICB9CiAgfQp9"); - public static final Block STRIPPED_MANGROVE_LOG_TATER = createTaterBlock(Blocks.STRIPPED_CRIMSON_STEM, "ewogICJ0aW1lc3RhbXAiIDogMTY0NzQ1MDg2MjQ5NSwKICAicHJvZmlsZUlkIiA6ICJhYzM2YmVkZGQxNGQ0YjVmYmQyYzc5OThlMWMwOTg3ZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJtYWlzYWthIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2MwM2QwZTc3NDJmYTY2NTA2YjU3MzljOThkMGNmMjk0MTE0NjM2MDg4NzdmYTY2N2NlMjljN2I4NTc5M2QxOGEiCiAgICB9CiAgfQp9"); - - public static final Block BRONZE_CAPSULE_TATER = createCapsuleTaterBlock(Vec3d.unpackRgb(0x764D22).toVector3f(), 90, "ewogICJ0aW1lc3RhbXAiIDogMTY1OTk5MjU0MTQ1MiwKICAicHJvZmlsZUlkIiA6ICIzYWJkYjI5ZDI2MTU0YTAxOWEzZWQ3OGRlMzI4OWUxNCIsCiAgInByb2ZpbGVOYW1lIiA6ICJFcmljSHViZXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzM5MTgyMjUwNGQ3OTQ5MTE4NmQ0MmI1YWI2ZmRkOTYxNWJmYzE4ODYzMjRiZTVmNWI2MTNkY2IwMzMxOTY3NyIKICAgIH0KICB9Cn0"); - public static final Block SILVER_CAPSULE_TATER = createCapsuleTaterBlock(Vec3d.unpackRgb(0xBFBFBF).toVector3f(), 9, "ewogICJ0aW1lc3RhbXAiIDogMTY1OTk5MjUwMjk3MCwKICAicHJvZmlsZUlkIiA6ICJlN2IxNmI2MzM2OGM0ODIzYmUxZDcxOTg5ODE5YWI3NSIsCiAgInByb2ZpbGVOYW1lIiA6ICJTb3VyY2VXcml0ZXJzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2FmZGNlM2VhMTM5OWRkMGI3MzhmYWFlY2Y4OWNjNWJkY2YxNzliOGRjNGYzZDc5NjRjOGNkNDVjODkyNTdmZDEiCiAgICB9CiAgfQp9"); - public static final Block GOLD_CAPSULE_TATER = createCapsuleTaterBlock(Vec3d.unpackRgb(0xF1A00E).toVector3f(), 1, "ewogICJ0aW1lc3RhbXAiIDogMTY1OTk5MjUyMjQyMSwKICAicHJvZmlsZUlkIiA6ICI0MjEwNTYxMWQxZjM0NzAyOTQ4NjE3OTYzMDY3NjY2NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUcmlraXRyYWthdGVsYXp6IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2RiNTM4ODgzNDU3OGNjYjkwNmU5N2QzZTU0YWViMzNlZGNjMTJkODIxZjA4MWI3ZWIwNDgzMGNiZDI2MGFkODEiCiAgICB9CiAgfQp9"); + public static final Block TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_BELL, -1, "8d531d40d09efd3a9a585b55e66a9a6f04c73af84d94d7c565549bf27b8b26bd"); + public static final Block RED_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_GUITAR, 7 / 24d, "2be51b227360ab65776725a91cded84b56f6920eec0d6fb5a57d5f1ada147aa6"); + public static final Block ORANGE_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM, 4 / 24d, "c5362e308822cf1c436a4ba6d0c3976139c98621c7aa2a96be99c73e97708efc"); + public static final Block YELLOW_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_CHIME, 2.5 / 24d, "fef74a6c7cb45d3c4bae134e6ec41fd7517f7eabe2c74dc76a51b39c63c38bc2"); + public static final Block GREEN_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_BIT, 21 / 24d, "57bb692499560f0393314a9f1ec11425b360e43c1ddb560de261cd04b8cc8e69"); + public static final Block BLUE_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_XYLOPHONE, 17 / 24d, "89ad5aecfb9ab6f36261e0c462acecf2078e7e575d9373bacc0503224c44250e"); + public static final Block PURPLE_TATEROID = createTateroidBlock(SoundEvents.BLOCK_NOTE_BLOCK_FLUTE, 11 / 24d, "d16a37512cb7ca372af5f37f9bd95d4603c4fa44be4143fb26aaa324e681c9b0"); + + public static final Block WHITE_TATER = createColorTaterBlock(DyeColor.WHITE, "73dab052d33ee467ba7fac9aa0e316db962e3e7ac6dbbff236667439e340392c"); + public static final Block ORANGE_TATER = createColorTaterBlock(DyeColor.ORANGE, "75b88126dbd4e860608965c044d0060ac03c26ebea1b652643fe03734ea1b12b"); + public static final Block MAGENTA_TATER = createColorTaterBlock(DyeColor.MAGENTA, "bef4cf40f02bc129e34f660ce3923387894b8f0814fc58c09726629fa7b1db64"); + public static final Block LIGHT_BLUE_TATER = createColorTaterBlock(DyeColor.LIGHT_BLUE, "e6f7e4641fa4ee4ba926ebae4669f22f276051b3629f8d89ce015a95c1137fb2"); + public static final Block YELLOW_TATER = createColorTaterBlock(DyeColor.YELLOW, "5956df3e88f01cdd26d1caa07fab723c3a3db319ba167a3bed287d461635f1b9"); + public static final Block LIME_TATER = createColorTaterBlock(DyeColor.LIME, "16671f4c7ce8e46099f367fc05c5b61089c887f4145aff2077a1a7d3631dd063"); + public static final Block PINK_TATER = createColorTaterBlock(DyeColor.PINK, "b3efebba4906f9f260aae83fee73012370521726fadf0101498197d7143a64df"); + public static final Block GRAY_TATER = createColorTaterBlock(DyeColor.GRAY, "7e491b6282eca12c9edcddfb3baf6e5fb0549c89d39088567415616c92dfd5f0"); + public static final Block LIGHT_GRAY_TATER = createColorTaterBlock(DyeColor.LIGHT_GRAY, "b5df73cc026043d09c54cb15d0923e314503e1d513026b59a5317b31da4c5289"); + public static final Block CYAN_TATER = createColorTaterBlock(DyeColor.CYAN, "4eb39032053a3f2e5bd1d19bfacd25b524b19cd0e70a5a92a61ac884904ecb54"); + public static final Block PURPLE_TATER = createColorTaterBlock(DyeColor.PURPLE, "ab69ffa68135001e8714c78617e5a1a0177827cbbd866eb984f524f023f87fe5"); + public static final Block BLUE_TATER = createColorTaterBlock(DyeColor.BLUE, "618be72e94291de1cc3e3d2e2fa8bbd79422cdcb0cb70cedde7dc9c1bbef5fb5"); + public static final Block BROWN_TATER = createColorTaterBlock(DyeColor.BROWN, "df942f7c24f4c10353da974a938ad75f9a7ccdca232a99de870c5691d75fd70c"); + public static final Block GREEN_TATER = createColorTaterBlock(DyeColor.GREEN, "fab98a4c69e817771fec17c08c7e031952c05a52015dcecb09c93576745c71e2"); + public static final Block RED_TATER = createColorTaterBlock(DyeColor.RED, "51e4bf6f7a029567d598fff73c3c76e0cdea956a7fff5ea7279ea4bf40c968c2"); + public static final Block BLACK_TATER = createColorTaterBlock(DyeColor.BLACK, "57a7caa44cedff925d23cd5d3f62bc06e83d3485551dcc4f9db2da7d9f8a9694"); + + public static final Block COAL_TATER = createTaterBlock(Blocks.COAL_BLOCK, "7eb25d3f8fcf48673ad0b171ea37154b43d57f6ab04d8ffb546fc606b8505bf4"); + public static final Block DIAMOND_TATER = createTaterBlock(Blocks.DIAMOND_BLOCK, "a399c9d599e0d9dc6a480e85f4dbecc45b318814026895ac8150fd2e2fa2599e"); + public static final Block EMERALD_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "cd76730df726b8ee9d72a3a478457d313626133de1d76c26cfc6af8e80e9c476"); + public static final Block GOLD_TATER = createTaterBlock(Blocks.GOLD_BLOCK, "180a7cc71153b89a536c148d2f1012d6772a7d3ba8321f922a6de46773c35af9"); + public static final Block IRON_TATER = createTaterBlock(Blocks.IRON_BLOCK, "174858c976f0274ebce3f3ffcef653609f29d37e0cc9cad25e586864b806cb23"); + public static final Block LAPIS_TATER = createTaterBlock(Blocks.LAPIS_BLOCK, "58d5cbda5c5046bf0b0f0d447c2fcc5e468707b6a4837c083af8e109aba9ce1c"); + public static final Block NETHERITE_TATER = createTaterBlock(Blocks.NETHERITE_BLOCK, "664dce4fade8e5f352001eff6900d9d4b142935ebed303106539f7ad0193621f"); + public static final Block QUARTZ_TATER = createTaterBlock(Blocks.QUARTZ_BLOCK, "7e7b4561d09d1a726fec3607706c9e3c77e8fc9b8c7e9c3637ca80ea0c86be21"); + public static final Block REDSTONE_TATER = createRedstoneTaterBlock(new DustParticleEffect(DustParticleEffect.RED, 1), "c47dd2536f5a5eb2bdb1ea4389d3af8ca2fd9d5d2c97c660fc5bf4d970c974de"); + + public static final Block COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "18207c7cf4007222691750b0783d6959261ddf72980483f7c9fcf96c2cba85b1"); + public static final Block EXPOSED_COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "bd5020090643edb5ec25d87cb1f408aad4f6018ec4bbe83d25a031ef1e705e4d"); + public static final Block WEATHERED_COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "7d9c61d68241667f8e462d18a84c1413ce3db13f93223912201c21327b4adb25"); + public static final Block OXIDIZED_COPPER_TATER = createTaterBlock(ParticleTypes.SCRAPE, "c7e9172d0ec2d20588bf5596ea79403e3da26975cdc5b6d0624e31857774298c"); + + public static final Block CAKE_TATER = createTaterBlock(Blocks.CAKE, "6d46fd58fd566bc0a90f8bc921daf0d9920591a5b153e64a80bb6d54dfb415b9"); + public static final Block ENDERTATER = createTaterBlock(ParticleTypes.PORTAL, "1f4f68547ec0d04a1a5c52ce8bb84847cd07674d50cf0740bf6f9c505826892d"); + public static final Block FURNACE_TATER = createTaterBlock(ParticleTypes.SMALL_FLAME, "80bdb710ee3d17de73bcf51dfcbc1f61e4dc3fd7a751d517bfd814b202b907bb"); + public static final Block MELON_TATER = createTaterBlock(Items.MELON_SLICE, "a3d21fbdca84efe016f75075ce55cf11382bf03bb691336b1e0f84c727d8c271"); + public static final Block PUMPKIN_TATER = createTaterBlock(Blocks.PUMPKIN, "21004377d30b55fd2f176e50e431ba88bd9eb8f353b103a67098a3fcbc12119d"); + public static final Block JACK_O_TATER = createTaterBlock(Blocks.JACK_O_LANTERN, "16772b77233f9d9035436287861b206ac13112d552a6c8e9754b26486b1e5bd"); + public static final Block SCULK_TATER = createTaterBlock(ParticleTypes.SOUL, "4265450388096aeb3d228c3b99f6ec64ea4a1a846c9903c7d9db1c309e27469b"); + public static final Block SLIME_TATER = createTaterBlock(Blocks.SLIME_BLOCK, "16747a7e1605794debfbb43befda2ce986075b3969e0b247ddd7bc6cdaa56a51"); + public static final Block HEROBRINE_TATER = createElderGuardianParticleTaterBlock("6e9ca544a4561b8cbcdb35820779960497ea748d685e2b17c814a18dc19147fd"); + public static final Block OCHRE_FROGLIGHT_TATER = createTaterBlock(ParticleTypes.SPIT, "92c34818ed06f3d76af6daabe87ab5b9a8c425865eaed0f873470af458b3152e"); + public static final Block PEARLESCENT_FROGLIGHT_TATER = createTaterBlock(ParticleTypes.SPIT, "b7e33a69c99e044b98d0a11b830ef7b764d6de9874f24b4f44610f565b76fab1"); + public static final Block VERDANT_FROGLIGHT_TATER = createTaterBlock(ParticleTypes.SPIT, "96ae96a834b8eee8edadaaef368f4b0c93a34b2a634ef89efc14326d965f0040"); + public static final Block SNOWMAN_TATER = createTaterBlock(ParticleTypes.SNOWFLAKE, "89ceb42efcfc372cbb26f817e1707a16864af16e0e37c793db05b16cd1f82ac"); + + public static final Block ACACIA_TATER = createTaterBlock(Blocks.ACACIA_PLANKS, "807d75cb114e057e5156af324517e87012d11566beb112152be4a94a65273535"); + public static final Block ANDESITE_TATER = createTaterBlock(Blocks.ANDESITE, "5b728494483d695a171affd93730b65271726a5c8840d96a1acbf64b4dbdb555"); + public static final Block BAMBOO_TATER = createTaterBlock(Blocks.BAMBOO, "acecf9447693e769f17469d67251cddb4b93e5b64efe7445d04ea286a50d8a3c"); + public static final Block BEDROCK_TATER = createTaterBlock(Blocks.BEDROCK, "c782d793af7aa0ebf5f5c9fdde3f636f93683368bf1daa544a449342b48355b"); + public static final Block BIRCH_TATER = createTaterBlock(Blocks.BIRCH_PLANKS, "c66003fcb840ebcd18f300b9facd1b8b936ef82e1ea6c7ca26b2c5b2bda5f007"); + public static final Block BONE_TATER = createTaterBlock(Blocks.BONE_BLOCK, "72b59c778f6656bb8502810eac82997d3669563f4fdd6d24d5ac008d334e3172"); + public static final Block BRAIN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "edf7e38eb4130e94bc59412d480b91529206ada944ed4c698a5ef957917f32f8"); + public static final Block BRICK_TATER = createTaterBlock(Blocks.BRICKS, "98adbfaa40e423ca12560484d26e3a049739a810490fa0b1564a765b1b65137d"); + public static final Block BUBBLE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "7dc1f18b5b4ccce2171796002bc434e49c53aeb23829e4d6f1d505d340522248"); + public static final Block CACTUS_TATER = createTaterBlock(ParticleTypes.DAMAGE_INDICATOR, "69ebd5e707f1da0df71ecded8c5a6d853f3c47943bd5f167d029de7ad01f846d"); + public static final Block CHORUS_TATER = createTaterBlock(ParticleTypes.REVERSE_PORTAL, "dc85f3160fecd3659eb4fabb9544c130688ec9219f2031592c1abc5f63b80422"); + public static final Block CLAY_TATER = createTaterBlock(Blocks.CLAY, "f9e2f8d3075e9bb78e237291c0a7f2cc17aff9959c735fba1863d243ae5fe3fc"); + public static final Block CRIMSON_TATER = createTaterBlock(Blocks.CRIMSON_PLANKS, "742731b12a9ffa0b0550b3e41c1f3d347ffb65d840dee2c8d22ec7bd2284050a"); + public static final Block DARK_OAK_TATER = createTaterBlock(Blocks.DARK_OAK_PLANKS, "f9df377e9f8647787a254792ae1fb1a6d03a7515642c26b74562572ffd51517d"); + public static final Block DARK_PRISMARINE_TATER = createTaterBlock(ParticleTypes.BUBBLE_COLUMN_UP, "98ec7227474cff245b820d30e59df47d1bf3b895dc8287e9de08102f6836a407"); + public static final Block DIORITE_TATER = createTaterBlock(Blocks.DIORITE, "162b67a6a24a8f0ed29dd33ba143038cebd346f8c87e0c38e532aa9957134be1"); + public static final Block DIRT_TATER = createTaterBlock(Blocks.DIRT, "15e74c322a4715d9a4c13595eb6cc720a4afef29c4da0892ebf4fc6ddd4cd1ae"); + public static final Block END_STONE_TATER = createTaterBlock(ParticleTypes.END_ROD, "87b4943c4f8f658439899673e91ac15815ab28b5c9eb72c2bd371e08fd1ac0b"); + public static final Block FIRE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "beadd606c1c7095851ffa38aa8dff23f22dcd78c4449c0e8ca50089252d907c2"); + public static final Block GRANITE_TATER = createTaterBlock(Blocks.GRANITE, "55cdae99f39b299f65d0a6ec3bd1fde2992689a664668482ab1d8a6d79dfc6e4"); + public static final Block GRASS_TATER = createTaterBlock(Blocks.GRASS_BLOCK, "a999a144cbe51321291ed00b073511a102d1dbbd7e8bff53fa33a2738f105a75"); + public static final Block HAY_TATER = createTaterBlock(ParticleTypes.HEART, "df65853f3ebf7c03e477fea14b19345b284bf591476461ac36d399c0dbb144fb"); + public static final Block HONEY_TATER = createTaterBlock(ParticleTypes.DRIPPING_HONEY, "623f2ad832c27e145076f1267875547444dfb0cef80403921ed4d03a0859fae5"); + public static final Block HONEYCOMB_TATER = createTaterBlock(ParticleTypes.LANDING_HONEY, "e917928e35f2fac59aa1d14d80c478f38d14e2f66ee59d4eb9d025605406481"); + public static final Block HORN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "3e17f4d2977dafce018ac06163f2a7c5672855d198da86fa050f27a7c45b2da4"); + public static final Block JUNGLE_TATER = createTaterBlock(Blocks.JUNGLE_PLANKS, "b9105eebf99ec35ac08aaa2ed8ac721590adbdb1eb3a158a82c11e71e76d28aa"); + public static final Block MYCELIUM_TATER = createTaterBlock(ParticleTypes.MYCELIUM, "f3447bbb99321b399b7a1913d9bc4e90e8b0fc9b9520af45a8f59a1540d4b620"); + public static final Block NETHER_WART_TATER = createTaterBlock(ParticleTypes.CRIMSON_SPORE, "81c05e8c91a4ca83120799053270dfd7fdf1376988a1a393645140ae89eb6762"); + public static final Block OAK_TATER = createTaterBlock(Blocks.OAK_PLANKS, "28cfc208966e2f5206b1aba0489e5fdb3f05e6d94befbc618ad80e74eb1016d2"); + public static final Block OBSIDIAN_TATER = createTaterBlock(Blocks.OBSIDIAN, "38adea8f484dba5baf67ace3ee7675758e2318868b2d72542ed3fff0d009f21"); + public static final Block PODZOL_TATER = createTaterBlock(Blocks.PODZOL, "5fe3cfce7c241fdaefe8d0255a545d2c329c1283232d61eaa7324b30a8f478f2"); + public static final Block PRISMARINE_BRICK_TATER = createTaterBlock(ParticleTypes.BUBBLE_COLUMN_UP, "6fdb11b2147b36ed496639bcf8bea8d07e45de610ec08223ca3d56aefb8d81ce"); + public static final Block PRISMARINE_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "abae0abdc506014751e89fa65bb802c81fc2ee3ed0e0a06582abb5bdd088e440"); + public static final Block RED_SAND_TATER = createTaterBlock(new BlockStateParticleEffect(ParticleTypes.FALLING_DUST, Blocks.RED_SAND.getDefaultState()), "7789a0f57334248b602322f57fb2ed708484bb6f7774442c7f2f2bf2ec09064f"); + public static final Block SAND_TATER = createTaterBlock(new BlockStateParticleEffect(ParticleTypes.FALLING_DUST, Blocks.SAND.getDefaultState()), "6d5332076f20d3f1ad766f4bd83649c573d1b3bf67abfa5be26cdf5ca4a948c8"); + public static final Block SEA_LANTERN_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "ccf764156bb262a3d47f4b885716aa7749077c56a31aa41248936255ed38e27"); + public static final Block SHROOMLIGHT_TATER = createTaterBlock(Blocks.SHROOMLIGHT, "c7aae4d5e03d8a758cdce91bd74573abc5306dfca6e44e5d0e14ca6c14085b36"); + public static final Block SHULKER_TATER = createTaterBlock(ParticleTypes.END_ROD, "e5efd875ee5f4a37ad05d392a65886c6dcaf10188c9199673b782b795a29a231"); + public static final Block SMOOTH_STONE_TATER = createTaterBlock(Blocks.SMOOTH_STONE, "8f7c81245a444328cff8a366d5a55a6897df99f89185adb76b9225551bfc6786"); + public static final Block SOUL_SAND_TATER = createTaterBlock(ParticleTypes.SOUL, "5750c407d6205c6d572eddbcc162e2e8dd61f3a26fb0eaa7dff99bcf8d03519a"); + public static final Block SPONGE_TATER = createTaterBlock(ParticleTypes.DRIPPING_WATER, "697a4102627b55490614f475d4fde0df51a8d0c45e9573799d198f4deca33a14"); + public static final Block SPRUCE_TATER = createTaterBlock(Blocks.SPRUCE_PLANKS, "fe400308900536545f886084d9f465f17311a41b7410cfaba323a5ac3b1b9a9c"); + public static final Block STONE_BRICK_TATER = createTaterBlock(Blocks.STONE_BRICKS, "bdf3cdb5266539c34485d439c6a07baa3fbe5556d980ef14483cd6f5271b089b"); + public static final Block TARGET_TATER = createTargetTaterBlock("386b52ed3d2b2a682b4c6f1d40a9ceabf72e7c5b60b8d92d2dcee97a8799450f"); + public static final Block TERRACOTTA_TATER = createTaterBlock(Blocks.TERRACOTTA, "57f120d92f3f076352b682345fdb82204b920e59d226c4c6d2c64d5abc6860e1"); + public static final Block TNTATER = createTaterBlock(ParticleTypes.EXPLOSION, "440d175ded62ff7b3cf9de979196e7b95da8a25e9e888c4bed06f5c011dc54a8", 10); + public static final Block TUBE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE, "dad0a4ef4c9994ee32a02fcb7960600a295b31a6fef94652998189295fd2ee84"); + public static final Block WARPED_TATER = createTaterBlock(Blocks.WARPED_PLANKS, "eb4db1936577cfcbbace1dbed72483482af32d99ecd090c8f145cac88ae4e8a2"); + public static final Block WARPED_WART_TATER = createTaterBlock(ParticleTypes.WARPED_SPORE, "9748cf1c78cfdea730a7ce05ae973a8afe326dc2f71f82a45232d9c6b08776d9"); + public static final Block WOOL_TATER = createTaterBlock(Blocks.WHITE_WOOL, "ed564fa98b7e8e3abf41779bfe759ca0a3191c8aa70f2eef0af139ba1102e27e"); + + public static final Block ACACIA_LOG_TATER = createTaterBlock(Blocks.ACACIA_LOG, "3b185be7121801b5a956ce462583c55928b31cbea74e4aae82e7330317a1ae60"); + public static final Block ANGRY_BEE_TATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "21004dc20ce74adbcc31f1588f268b4cb431b501679e1db7451869bd04779b4b"); + public static final Block BEACON_TATER = createTaterBlock(ParticleTypes.ENTITY_EFFECT, "6f7fd952ec5da74a25208853161a15d2f6d022835afe881bd271c710ba25935e"); + public static final Block BEE_NEST_TATER = createTaterBlock(ParticleTypes.DRIPPING_HONEY, "37b0b38538fac97d26241bf51212a26667596b1b14f1307432c3dcef033af1d0"); + public static final Block BEE_TATER = createTaterBlock(ParticleTypes.FALLING_HONEY, "80480b902bb32e2b145bb5262629ad7a920d3600365d3101936efc35aad830bd"); + public static final Block BEEHIVE_TATER = createTaterBlock(ParticleTypes.DRIPPING_HONEY, "f508a30a1bbc65fbfc58da5dc15d4e930b23b1b48afe72923c506a27cbe06366"); + public static final Block BIRCH_LOG_TATER = createTaterBlock(Blocks.BIRCH_LOG, "6950c69d92a635cb945f845a1a5c428a8e0a0cc2a8b0c563538ec171c4dcee6"); + public static final Block BLACKSTONE_TATER = createTaterBlock(Blocks.BLACKSTONE, "e67acd12c3dee918cc5f3b1a88ab7367549caf978357d79d19d2d486b7acc298"); + public static final Block BLAZE_TATER = createTaterBlock(ParticleTypes.FLAME, "85e678d6edab035d25841cfb4c90b631a7242e9d4cf6bcf00f168b8bf7cd290d"); + public static final Block BOOKSHELF_TATER = createTaterBlock(ParticleTypes.ENCHANT, "dbe032fa6759ba137e52abda44c099344698d80b64257c9295213af168352cae"); + public static final Block BROWN_MOOSHROOM_TATER = createTaterBlock(ParticleTypes.HEART, "12b92975d95348d7cb94133afcb11b56fc0b4b1c373647dda83876442eee2d41"); + public static final Block BROWN_MUSHROOM_TATER = createTaterBlock(Blocks.BROWN_MUSHROOM_BLOCK, "d5268b990a497d6608f82ba664a8c7c981c28055aac34895f230cbdb284b67b8"); + public static final Block CAVE_SPIDER_TATER = createTaterBlock(ParticleTypes.SPORE_BLOSSOM_AIR, "9499105f458b25a1e85b7312d00b4f1e1d71d5fd08e2165d77693ac2cab2f2a8"); + public static final Block COBBLED_DEEPSLATE_TATER = createTaterBlock(Blocks.COBBLED_DEEPSLATE, "2b378b15b46b469b36da1fb0ac41f2d61df66dd315d5b00714cf7564d6a1eea2"); + public static final Block COBBLESTONE_TATER = createTaterBlock(Blocks.COBBLESTONE, "7effa3c069da9199503f2fecc1db83fe843491200ba5776d6e799cd24a771c44"); + public static final Block COCOA_TATER = createTaterBlock(Blocks.COCOA, "c4f61e517ea2118d00fc68d3d88abd50b59f3c6f36a63b51793c8699c0a52440"); + public static final Block COLD_STRIDER_TATER = createTaterBlock(ParticleTypes.SNOWFLAKE, "a71ba7597744db25f0efa20b87c3e6aa284385dfacf24952c80b87afa7f6cc84"); + public static final Block COW_TATER = createTaterBlock(ParticleTypes.HEART, "945f14291e91f120e9afba2729302cb75e7eab2afd7f3c39129f14dfc8061c55"); + public static final Block CRAFTING_TATER = createTaterBlock(Blocks.CRAFTING_TABLE, "c888ec7f32ee555a29e073600961f90618203e60baf13a077f4821c4b98bd62f"); + public static final Block CRIMSON_NYLIUM_TATER = createTaterBlock(ParticleTypes.CRIMSON_SPORE, "c47f7ef4d21df90eaa2cf876d53a02773b13262f90324b03d94546fa0b52cb5a"); + public static final Block CRIMSON_STEM_TATER = createTaterBlock(Blocks.CRIMSON_STEM, "247fee4d47e209761521a3adc8f79c3f69b9cd6083849a279d375e847fca369d"); + public static final Block DARK_OAK_LOG_TATER = createTaterBlock(Blocks.DARK_OAK_LOG, "623ceb12251eb2e570210a8433213078d3b512b759e2906f6311d2fcc9524886"); + public static final Block DAYLIGHT_DETECTOR_TATER = createDaylightDetectorTaterBlock("3523f4c9e9bccbd42ababb9f8fce50f1a27260efe00d20a425c6b2968a7af227", false); + public static final Block DEAD_BRAIN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "5db8256bd78f3e34e2666ae29f29433aa7187525fbf3e539c3bf010a28ca3935"); + public static final Block DEAD_BUBBLE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "bc0d41055df5ba2342dedd76fedb0d7f3f2d992ebdb5870e426c61dcf2c67686"); + public static final Block DEAD_FIRE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "88cb70f602f9bc3064c34f80f47148a7a6c32ddc6f5580dd09fae47812e95d31"); + public static final Block DEAD_HORN_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "a5ae31b1dbdd251643835268750699b880d83c2cee7578745ccc6adb2780d192"); + public static final Block DEAD_TUBE_CORAL_TATER = createTaterBlock(ParticleTypes.BUBBLE_POP, "236d9b535fe8fb6f0bca188f5a6feda3c72423d2bf3d226a85983d5805319b72"); + public static final Block DEEPSLATE_BRICK_TATER = createTaterBlock(Blocks.DEEPSLATE_BRICKS, "3853ed89b5e05717e7bd00e9a33d7e65ebde55e81c0ef868fecc7d2158bc6a1f"); + public static final Block DEEPSLATE_TATER = createTaterBlock(Blocks.DEEPSLATE, "b76d7b1d85b8b724930470eb2986b914b85c4983fc5651a55f09571ababc8b42"); + public static final Block DRIED_KELP_TATER = createTaterBlock(Blocks.DRIED_KELP_BLOCK, "bc2abdca594bfb97b2a4b49d88ef7bc01969171a89be411426ce5c0f94fa7a94"); + public static final Block DROWNED_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "5ea6f03c0cab4a968976ad95beaba4c60ab46755aa7ff8400b2d87383df6b885"); + public static final Block EYE_OF_ENDER_TATER = createTaterBlock(ParticleTypes.REVERSE_PORTAL, "36fc9fc2b0ab94a11303e3efb8b2534662e5d11ac8a9b9310b588a512eaab55e"); + public static final Block FOX_TATER = createTaterBlock(ParticleTypes.HEART, "d0d40bc2aa788d6f9d0e3fcde50714f3f47d5db64f3d6a11b2c3fad2b65ba1ea"); + public static final Block GHAST_TATER = createTaterBlock(ParticleTypes.DRIPPING_OBSIDIAN_TEAR, "66585c4fc057e15bfc28db7ae8ac778016504f31d5422dfda2345967ba53c44f"); + public static final Block GILDED_BLACKSTONE_TATER = createTaterBlock(Blocks.GILDED_BLACKSTONE, "987e60212d2d60123e26d1be977de784aa1afc781522645c9a74e492f2295e67"); + public static final Block GLOW_SQUID_TATER = createTaterBlock(ParticleTypes.GLOW_SQUID_INK, "edd69cada8e6095770ffcfc91fd6df851630efd3bad08dfce78bcb30a5702909"); + public static final Block GLOWSTONE_TATER = createTaterBlock(ParticleTypes.GLOW, "58283dd855f99826c8e938d0f162f111b067bad26685e606b35c847946e4f38f"); + public static final Block HUSK_TATER = createTaterBlock(Items.ROTTEN_FLESH, "26a88dfb103e0a938776bb27d464bdbc02d39229869975179f1376808a6744b5"); + public static final Block INVERTED_DAYLIGHT_DETECTOR_TATER = createDaylightDetectorTaterBlock("b721a9503c2c2b25e5dffe5bad1f8bd9f4f620f5ad79a4568322b405973426dd", true); + public static final Block JUNGLE_LOG_TATER = createTaterBlock(Blocks.JUNGLE_LOG, "fd9658650626b1c63fe8fa5f10e5a981a400532de45153cfe481f302d8980818"); + public static final Block MAGMA_CUBE_TATER = createTaterBlock(ParticleTypes.DRIPPING_LAVA, "b34a0d09a2721e18afd3f4c1f2abf630734566e5e04054cc086945dd3af4a1b3"); + public static final Block MOOBLOOM_TATER = createTaterBlock(ParticleTypes.COMPOSTER, "a5a022dae96e419275a0bf5dfabde2d1c4dd073376d52265bee5dd67776ee5a2"); + public static final Block MUDDY_PIG_TATER = createTaterBlock(ParticleTypes.HEART, "70137b92b07e1c24c6d3042daa2997a871383c7278d88e3ecf1964e4b75ff993"); + public static final Block MUSHROOM_STEM_TATER = createTaterBlock(Blocks.MUSHROOM_STEM, "104dd3bad53758af4eb92be90e78277a6201e63d63614c463c5156d210a61c11"); + public static final Block NETHER_BRICK_TATER = createTaterBlock(Blocks.NETHER_BRICKS, "751534292b1f5e13c8cea2d4f4f653c9f46cb63f5e2ad480c24fc98f22a027c0"); + public static final Block NETHERRACK_TATER = createTaterBlock(Blocks.NETHERRACK, "787fea3e6c6da9693d74b0607d6c7c8081dd75458a5b52110a4761d30775040f"); + public static final Block OAK_LOG_TATER = createTaterBlock(Blocks.OAK_LOG, "13d4a4903b8374b799549775e0f9d45bbd9b2b219edff4d1ddb268472ca47a29"); + public static final Block PIG_TATER = createTaterBlock(ParticleTypes.HEART, "530a64b89a9a46c58300eae437817789afab264c0be187b6f2733ab24adc8480"); + public static final Block POLAR_BEAR_TATER = createTaterBlock(Blocks.SNOW_BLOCK, "92a9da572909635f119bdaa54162991f44c99812fa3e504fe2305e2c8210ddf2"); + public static final Block PUFFERTATER = createTaterBlock(ParticleTypes.DRIPPING_WATER, "4d777aa416424b7bb713c158117f7392a74ebd1fe49eff6fa2c4b1192720eb48"); + public static final Block RED_MOOSHROOM_TATER = createTaterBlock(ParticleTypes.HEART, "3f41d3f6948a08ca1388b31cde2d629364ccb2a21a4b20bfec618ec37637e803"); + public static final Block RED_MUSHROOM_TATER = createTaterBlock(Blocks.RED_MUSHROOM_BLOCK, "2730185a1933b6e90c1d4ab439aeac51259f428732b4cb38fcfe4988cb0994d1"); + public static final Block RED_NETHER_BRICK_TATER = createTaterBlock(Blocks.RED_NETHER_BRICKS, "70986bf9dba2c063c3afa5643a79a4adf7379e249bbae67861ae3eb89b8bfe91"); + public static final Block RED_SANDSTONE_TATER = createTaterBlock(Blocks.RED_SANDSTONE, "557a2c97c9225ca72cc2507f465a0ff96c949035d8f53a9420d7cdf6f875b805"); + public static final Block RUBY_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "becb1ee95fba3f868fc36c126e5962244ac4bf64cd35b117871e62590a1660ed"); + public static final Block SANDSTONE_TATER = createTaterBlock(Blocks.SANDSTONE, "dee6a6e0c3521db9b0279d4d5a11f009e196cfe6e1f5babf1e09d99f5c48ba13"); + public static final Block SEA_PICKLE_TATER = createTaterBlock(ParticleTypes.UNDERWATER, "ec327a8c1dddd36722345cb12f627e99fdd9b56151f34e2d45794628f08f682a"); + public static final Block SHEEP_TATER = createTaterBlock(ParticleTypes.HEART, "2e00da1671dd107fade939288e944bbf02609b13f0d0ff9d4e81448cf37ab26c"); + public static final Block SHIELDED_WITHER_TATER = createTaterBlock(ParticleTypes.SOUL, "7331e65f919d20063df086e2423340fac6d594207b525600d0776aec86fadb30"); + public static final Block SNOW_FOX_TATER = createTaterBlock(ParticleTypes.HEART, "bd1d473e3e82d0afca0f7568748f0ff637334632cfb5f6ac228533fadf9bbbf5"); + public static final Block SPIDER_TATER = createTaterBlock(Items.SPIDER_EYE, "8c711ae226b0e84806e93986ad175e855e07d8b23c2fc369596549f571c739f0"); + public static final Block SPRUCE_LOG_TATER = createTaterBlock(Blocks.SPRUCE_LOG, "87a820cdad664cf54f98e36f70c92592c584c8a586003eb6ebfcff2f93cda0dc"); + public static final Block SQUID_TATER = createTaterBlock(ParticleTypes.SQUID_INK, "9896dd194df00aa0f48474dc75c9bb45fa7813ae50e42c4a69f08c2d1b3c4759"); + public static final Block STRAY_TATER = createTaterBlock(Blocks.BONE_BLOCK, "2d7952ac41e6dafcd3adeaad656728a06599cfa5173085d42ca4fcdf8fb76c44"); + public static final Block STRIDER_TATER = createTaterBlock(ParticleTypes.LAVA, "730c64d1460190f05169a9f6d1292b298c7ff9673083aed0a22a221153a0f519"); + public static final Block TURTLE_EGG_TATER = createTaterBlock(Blocks.TURTLE_EGG, "7e7054403552090e60bb5f4025e06f5bfb513c989a5e87ad88cfe468129ed7f1"); + public static final Block WARPED_NYLIUM_TATER = createTaterBlock(ParticleTypes.WARPED_SPORE, "2c80206143d8e76cee31adf8ae64ba4c67d6335abf123f4eb973cf302f6ca2cf"); + public static final Block WARPED_STEM_TATER = createTaterBlock(Blocks.WARPED_STEM, "2e471eadd1d8195bd5584e1e266ba4c7148c968fb173735c4a6975b590756af"); + public static final Block WITHER_TATER = createTaterBlock(ParticleTypes.SOUL, "71346598ada1df7f8bc27dde4af895db1655f5d3d1b7d5d4831556feb84ddca8"); + + public static final Block AZALEA_TATER = createTaterBlock(Blocks.AZALEA_LEAVES, "dc836641ecb40e775f85f4c71b219120e43080e03b8c84a7f60f1ba8127f2931"); + public static final Block BELL_TATER = createBellTaterBlock("a84b726a75b81393e206c19ca508570a8a8db64f88b90775eb451214ab0d7561"); + public static final Block COLD_FROG_TATER = createTaterBlock(ParticleTypes.SPLASH, "f58f867bb5f570c7ca9afa97a698a3ea22b6218a0445958dc8bacdb53976da2e"); + public static final Block CONDUIT_TATER = createTaterBlock(ParticleTypes.NAUTILUS, "c59d90ffba4debacc7f8cb400c40e36e15902166cd5544baac5fbbb830a1c58c"); + public static final Block ELDER_GUARDIAN_TATER = createElderGuardianParticleTaterBlock("386f90f38959c5652ce3bd2840bdb18036d3153f6284e12af07f000663c536fe"); + public static final Block END_STONE_BRICK_TATER = createTaterBlock(ParticleTypes.END_ROD, "5c0a9483d2b43c284dc8abd6149342dc63136f3bb208476e17f434059ece4582"); + public static final Block FLOWER_POT_TATER = createTaterBlock(ParticleTypes.COMPOSTER, "5378b1804af0875cb00fd350e6116bfd2165db209ed8b8e0c48f984669553f45"); + public static final Block GUARDIAN_TATER = createTaterBlock(Blocks.PRISMARINE, "c152df6875886f29a0f1f110c2a54820248ceef688fe150797dde4e9d4863c0e"); + public static final Block ILLAGER_TATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "522c1190fb561f1dfc994b281eb145955e2e439511c83aaf64fed1ab09ec1316"); + public static final Block ILLUSIONER_TATER = createTaterBlock(ParticleTypes.ENTITY_EFFECT, "6c31b980a02847d5ac948663e95604e754e0b736d4593c7841332833144f2782"); + public static final Block JUKEBOX_TATER = createTaterBlock(ParticleTypes.NOTE, "75f6f61e3a9035a758174979ca664b26e47ca9b273f324f0921b5ad58bdb5835"); + public static final Block LANTERN_TATER = createTaterBlock(ParticleTypes.FLASH, "16c275f657bac1363333abf1db0d18bfabf087fbf3df356ec7f41258bc16b76d", 20); + public static final Block PIGLIN_TATER = createTaterBlock(Blocks.GOLD_BLOCK, "4df6290ac1aff8b179420f2a05baa3c721a5cf49f3bd8f9928a0a57c0cf369e"); + public static final Block PINK_WITHER_TATER = createTaterBlock(ParticleTypes.HEART, "93592323dbce9eec933aa915af71701b77ee478f7e1dd126501a027b1d430bc7"); + public static final Block PISTON_TATER = createTaterBlock(Blocks.PISTON, "84a5081444bb13cf75bc8040020e91f39e056cf273cd8ebe528e09100a183e53"); + public static final Block PURPUR_TATER = createTaterBlock(ParticleTypes.END_ROD, "9c619e55d60579e21126a5c0b88fd8b8baa98d24d1299ed1515fa1452f6ab898"); + public static final Block SOUL_LANTERN_TATER = createTaterBlock(ParticleTypes.SOUL_FIRE_FLAME, "a9419cebd15ebc79fe8eba6984637f3c2892e6d68fcc4caa0f3499cfddec25ce"); + public static final Block SOUL_SOIL_TATER = createTaterBlock(ParticleTypes.SOUL, "c45eb5699f0fafaa6d8e33227e2e626def520545392dffbfa6a071feec239049"); + public static final Block STICKY_PISTON_TATER = createTaterBlock(Blocks.SLIME_BLOCK, "404735be9d3e0dea9cec3d4a035fa4b0668b0a7e79cafecb80decba02ace2451"); + public static final Block TEMPERATE_FROG_TATER = createTaterBlock(ParticleTypes.SPLASH, "e2dd56ee8f70c6bbb0fb43ed875071b1ed4a4a8130cb4f8dd17869e1395beb4e"); + public static final Block UNDERWATER_TNTATER = createTaterBlock(ParticleTypes.EXPLOSION, "fd90716acd4dd643bef71a84e44bc5cb75ec8ab260986dd679452778c80f8496", 10); + public static final Block VEX_TATER = createTaterBlock(ParticleTypes.ENCHANTED_HIT, "9f15dcbe0bde9f613146ba4d51d5448eaf80d260bdb323d2358371e8c3d50829"); + public static final Block VILLAGER_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "7c34f81b74855b9c6a2da0a9000039871a17631976c9f9d0850ae30e31b98397"); + public static final Block VINDITATER = createTaterBlock(ParticleTypes.ANGRY_VILLAGER, "5ca5f1069c3399ea3eda014b9dc5aac3827116ed93617bb44ba87717b11ff98a"); + public static final Block WANDERING_TRADER_TATER = createTaterBlock(ParticleTypes.HAPPY_VILLAGER, "860592fc5385f74ffe8c3e3e9f1ad16a5a865bcfa33697483ff7a5da3a784392"); + public static final Block WARM_FROG_TATER = createTaterBlock(ParticleTypes.SPLASH, "7ea9de371ba4a3edfe8260a559c7cc25564d2cdbb7097d0d3575908a8b627f10"); + public static final Block WAX_TATER = createTaterBlock(ParticleTypes.LANDING_HONEY, "acc39045a9f072a3adce91f7dd75ce2385cf6c8c251adb5d7e98ae999ae81777"); + public static final Block WITCH_TATER = createTaterBlock(ParticleTypes.ENTITY_EFFECT, "1a02c42db26bda231513924f916c1a37abe89255ab3cb77d7da95469052917f3"); + public static final Block ZOMBIE_VILLAGER_TATER = createTaterBlock(Items.ROTTEN_FLESH, "7e37fe7abf9ee78de2889993e24d3fc7784269f03ae65da2d8ab7a59e0d1516f"); + public static final Block ZOMBIFIED_PIGLIN_TATER = createTaterBlock(Items.ROTTEN_FLESH, "248b2a6973bbeb1a3e48c8e0b695d733d5a4e25272a639d248d89cf4129cc2e9"); + + public static final Block BONE_SPIDER_TATER = createTaterBlock(Blocks.BONE_BLOCK, "dcde0b254cf7d0e8a170c667de621c414e7475e06dafa8ada868224a2fa7a29b"); + public static final Block BOULDERING_ZOMBIE_TATER = createTaterBlock(Items.ROTTEN_FLESH, "ca552c8f68cd8e46bd493e77a1726d7e03a460fc89ec80d273499521cf9831f0"); + public static final Block CHARGED_CREEPER_TATER = createTaterBlock(ParticleTypes.EXPLOSION, "16134034e6d24f5f723171de2428c92106cd261d329d965195a9065ff5378b00", 10); + public static final Block LOBBER_ZOMBIE_TATER = createTaterBlock(Items.ROTTEN_FLESH, "4178a5a659a245900fbdc468f4d421c34fa0d1c7e0ff1f47be9de580648035fe"); + public static final Block MOSSY_SKELETATER = createTaterBlock(Blocks.MOSS_BLOCK, "9c07242332a0b5c85f69f626b83a28bea93a41c51f7c5c1c9bcadea6ea7f6895"); + public static final Block STRIPPED_ACACIA_LOG_TATER = createTaterBlock(Blocks.STRIPPED_ACACIA_LOG, "1ac99e952e6f5e42066139fa692179f23d33281521d65901079e403a52edd430"); + public static final Block STRIPPED_BIRCH_LOG_TATER = createTaterBlock(Blocks.STRIPPED_BIRCH_LOG, "b67e34704da63d6ba4f3c91fc9aab11b5efc36e0f823d4d9c84ef021149585c4"); + public static final Block STRIPPED_CRIMSON_STEM_TATER = createTaterBlock(Blocks.STRIPPED_CRIMSON_STEM, "ff702bf5fb8a672fd89696a0a09999db06b22cdc4a175fd5366916d84297da82"); + public static final Block STRIPPED_DARK_OAK_LOG_TATER = createTaterBlock(Blocks.STRIPPED_DARK_OAK_LOG, "439b09449076c58a911d464256c29dd5d634852287630c05f1c3c82a4368ce62"); + public static final Block STRIPPED_JUNGLE_LOG_TATER = createTaterBlock(Blocks.STRIPPED_JUNGLE_LOG, "1e811034ee1631e7f560ff35b6bdb5e0b460b559d799740ac59d0e2d2c0bb9e9"); + public static final Block STRIPPED_OAK_LOG_TATER = createTaterBlock(Blocks.STRIPPED_OAK_LOG, "7cf7cfc6763ba87781f1de7f76ec5a26436c14a74b1292f7d2409f399dd72773"); + public static final Block STRIPPED_SPRUCE_LOG_TATER = createTaterBlock(Blocks.STRIPPED_SPRUCE_LOG, "7a1f047b2d61b14e717f6c42f67af5da1d101d0a37340c6e497f3e3af1d62691"); + public static final Block STRIPPED_WARPED_STEM_TATER = createTaterBlock(Blocks.STRIPPED_WARPED_STEM, "54453447dfc628793e1c704509fd24dd3effcaff9ce6aba16efbee3a1001d65f"); + public static final Block TROPICAL_SLIME_TATER = createTaterBlock(ParticleTypes.FISHING, "473d7ffeeb9562e1c0fe59ac45dbec370750793cd6acbd01e26c3a02cea77fea"); + + public static final Block APPLE_TATER = createTaterBlock(Items.APPLE, "379e6c96a907fce60e8c0c55b02b554663e50f6dff9eee113e3742f8779c0304"); + public static final Block GOLDEN_APPLE_TATER = createTaterBlock(Items.GOLDEN_APPLE, "27a47cff605fb936bb826109bb2b5e77dc3210e211f2f53c8470cf8ed2c80476"); + public static final Block ICE_TATER = createTaterBlock(Blocks.ICE, "bc89a947d4fd385418f3352f2137bae390cbdf96d5fb479b59a97029f34e1461"); + public static final Block KING_TATER = createTaterBlock(ParticleTypes.TOTEM_OF_UNDYING, "b8b7fc416de5d8a0f1b6f6a7234e6789fb46fed358522fe90da8f92ceafeea3b"); + public static final Block RAW_COPPER_TATER = createTaterBlock(Blocks.RAW_COPPER_BLOCK, "e02d263510b34498c8814b11c8deefb754d647c4444db61527b600a88b566204"); + public static final Block RAW_GOLD_TATER = createTaterBlock(Blocks.RAW_GOLD_BLOCK, "c9cf35e928c3b94a29a6049414cd411bd223da3dd232b7a6bbb34fbf37e5db53"); + public static final Block RAW_IRON_TATER = createTaterBlock(Blocks.RAW_IRON_BLOCK, "50d19e2e668e4c6329b1491c43a75e8b484fa5ef834ff3bacdb56fcc2d49c235"); + + public static final Block ALLAY_TATER = createTaterBlock(ParticleTypes.HEART, "36911b99859c6627cba710041a7ce4ab17791e5c9278a85c75c1596dd1c789bb"); + public static final Block MANGROVE_LOG_TATER = createTaterBlock(Blocks.SPRUCE_LOG, "2ab0654a238462e8f1746431d05dfd13d95260031afe335b696feaa6bb49d678"); + public static final Block MANGROVE_TATER = createTaterBlock(Blocks.CRIMSON_PLANKS, "42ccd79aabbb47ae9bdb6b00ad9f43e65d098cc27caa3a2cd8d94b283f726464"); + public static final Block MUD_BRICK_TATER = createTaterBlock(Blocks.TERRACOTTA, "e37555d890f905e72083844ca751a661d84ed599ac649dc382174af2180ba12"); + public static final Block MUD_TATER = createTaterBlock(Blocks.STONE, "f83561c253f837c077d9e5394f71167220f9966aafe1d59a87caacbd0a3e4814"); + public static final Block PACKED_MUD_TATER = createTaterBlock(Blocks.DIRT, "67a5911061c9497c1e888aabe97370d4d00f900ca798cb1ac8cf41fe7bb41532"); + public static final Block STRIPPED_MANGROVE_LOG_TATER = createTaterBlock(Blocks.STRIPPED_CRIMSON_STEM, "c03d0e7742fa66506b5739c98d0cf29411463608877fa667ce29c7b85793d18a"); + + public static final Block LUCY_AXOLOTL_TATER = createTaterBlock(ParticleTypes.HEART, "721a824dcfa8d7503f008f59d7e4874a58ba6f6351750720c78a55eb24211fb6"); + public static final Block WILD_AXOLOTL_TATER = createTaterBlock(ParticleTypes.HEART, "861a7607987e0751e10c3d819775b58c45dba2911bd5222ca8111a8401248d56"); + public static final Block GOLD_AXOLOTL_TATER = createTaterBlock(ParticleTypes.HEART, "9e8dff1cf4f1e76c76993ab9316ef7904b229c37b8cbd1876ccb8c9bcbd36502"); + public static final Block CYAN_AXOLOTL_TATER = createTaterBlock(ParticleTypes.HEART, "9d61be444b360184cc39faecfac849359ba56843e1469a3c4687f004b9a7ae65"); + public static final Block BLUE_AXOLOTL_TATER = createTaterBlock(ParticleTypes.HEART, "88bc29626c5311e82f18a692d7b26bec5b841a0533ba633e5887a172c765bf05"); + + public static final Block BRONZE_CAPSULE_TATER = createCapsuleTaterBlock(Vec3d.unpackRgb(0x764D22).toVector3f(), 90, "7391822504d79491186d42b5ab6fdd9615bfc1886324be5f5b613dcb03319677"); + public static final Block SILVER_CAPSULE_TATER = createCapsuleTaterBlock(Vec3d.unpackRgb(0xBFBFBF).toVector3f(), 9, "afdce3ea1399dd0b738faaecf89cc5bdcf179b8dc4f3d7964c8cd45c89257fd1"); + public static final Block GOLD_CAPSULE_TATER = createCapsuleTaterBlock(Vec3d.unpackRgb(0xF1A00E).toVector3f(), 1, "db5388834578ccb906e97d3e54aeb33edcc12d821f081b7eb04830cbd260ad81"); public static final Block CORRUPTATER = new CorruptaterBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), 2); public static final BlockEntityType LAUNCH_PAD_ENTITY = FabricBlockEntityTypeBuilder.create(LaunchPadBlockEntity::new, GOLD_LAUNCH_PAD, IRON_LAUNCH_PAD).build(); + public static final BlockEntityType CONTRIBUTOR_STATUE_ENTITY = FabricBlockEntityTypeBuilder.create(ContributorStatueBlockEntity::new, CONTRIBUTOR_STATUE).build(); public static final BlockEntityType TATEROID_ENTITY = FabricBlockEntityTypeBuilder.create(TateroidBlockEntity::new, TATEROID, RED_TATEROID, ORANGE_TATEROID, YELLOW_TATEROID, GREEN_TATEROID, BLUE_TATEROID, PURPLE_TATEROID).build(); public static final BlockEntityType DAYLIGHT_DETECTOR_TATER_ENTITY = FabricBlockEntityTypeBuilder.create(DaylightDetectorTaterBlockEntity::new, DAYLIGHT_DETECTOR_TATER, INVERTED_DAYLIGHT_DETECTOR_TATER).build(); public static final BlockEntityType BELL_TATER_ENTITY = FabricBlockEntityTypeBuilder.create(BellTaterBlockEntity::new, BELL_TATER).build(); @@ -399,20 +419,24 @@ private static Block createSimple(Block virtual) { return new SimplePolymerBlock(AbstractBlock.Settings.copy(virtual).strength(100), virtual); } + private static Block createBotanicTaterBlock(ParticleEffect effect, String textureUp, String textureDown) { + return new BotanicalPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), textureUp, textureDown, effect, 2); + } + private static Block createTaterBlock(ParticleEffect effect, String texture) { - return new TinyPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), effect, texture); + return new CubicPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), effect, texture); } private static Block createTaterBlock(Block particleBlock, String texture) { - return new TinyPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), particleBlock, texture); + return new CubicPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), particleBlock, texture); } private static Block createTaterBlock(Item particleItem, String texture) { - return new TinyPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), particleItem, texture); + return new CubicPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), particleItem, texture); } private static Block createTaterBlock(ParticleEffect effect, String texture, int particleRate) { - return new TinyPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), effect, texture, particleRate); + return new CubicPotatoBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), effect, texture, particleRate); } private static Block createColorPatternTaterBlock(Vector3f[] pattern, String texture) { @@ -431,8 +455,8 @@ private static Block createDiceTaterBlock() { return new DiceTaterBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100)); } - private static Block createTateroidBlock(RegistryEntry defaultSound, String texture) { - return new TateroidBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), defaultSound, texture); + private static Block createTateroidBlock(RegistryEntry defaultSound, double particleColor, String texture) { + return new TateroidBlock(AbstractBlock.Settings.of(Material.SOLID_ORGANIC).strength(100), defaultSound, particleColor, texture); } private static Block createColorTaterBlock(DyeColor color, String texture) { @@ -465,12 +489,14 @@ private static Block createCapsuleTaterBlock(Vector3f color, int weight, String public static void register() { register("nucleoid_logo", NUCLEOID_LOGO); + register("nucle_past_logo", NUCLE_PAST_LOGO); register("end_portal", END_PORTAL); register("end_gateway", END_GATEWAY); register("safe_tnt", SAFE_TNT); register("gold_launch_pad", GOLD_LAUNCH_PAD); register("iron_launch_pad", IRON_LAUNCH_PAD); + register("contributor_statue", CONTRIBUTOR_STATUE); register("infinite_dispenser", INFINITE_DISPENSER); register("infinite_dropper", INFINITE_DROPPER); register("snake_block", SNAKE_BLOCK); @@ -494,6 +520,7 @@ public static void register() { register("yellow_concrete_powder", YELLOW_CONCRETE_POWDER); register("tiny_potato", TINY_POTATO); + register("botanical_potato", BOTANICAL_TINY_POTATO); register("irritater", IRRITATER); register("sad_tater", SAD_TATER); register("flowering_azalea_tater", FLOWERING_AZALEA_TATER); @@ -519,6 +546,8 @@ public static void register() { register("nonbinary_tater", NONBINARY_TATER); register("pan_tater", PAN_TATER); register("flipped_tater", FLIPPED_TATER); + register("backward_tater", BACKWARD_TATER); + register("upward_tater", UPWARD_TATER); register("santa_hat_tater", SANTA_HAT_TATER); register("genderfluid_tater", GENDERFLUID_TATER); register("demisexual_tater", DEMISEXUAL_TATER); @@ -771,6 +800,12 @@ public static void register() { register("packed_mud_tater", PACKED_MUD_TATER); register("stripped_mangrove_log_tater", STRIPPED_MANGROVE_LOG_TATER); + register("lucy_axolotl_tater", LUCY_AXOLOTL_TATER); + register("wild_axolotl_tater", WILD_AXOLOTL_TATER); + register("gold_axolotl_tater", GOLD_AXOLOTL_TATER); + register("cyan_axolotl_tater", CYAN_AXOLOTL_TATER); + register("blue_axolotl_tater", BLUE_AXOLOTL_TATER); + register("bronze_capsule_tater", BRONZE_CAPSULE_TATER); register("silver_capsule_tater", SILVER_CAPSULE_TATER); register("gold_capsule_tater", GOLD_CAPSULE_TATER); @@ -778,9 +813,12 @@ public static void register() { register("corruptater", CORRUPTATER); registerBlockEntity("launch_pad", LAUNCH_PAD_ENTITY); + registerBlockEntity("contributor_statue", CONTRIBUTOR_STATUE_ENTITY); registerBlockEntity("tateroid", TATEROID_ENTITY); registerBlockEntity("daylight_detector_tater", DAYLIGHT_DETECTOR_TATER_ENTITY); registerBlockEntity("bell_tater", BELL_TATER_ENTITY); + + TinyPotatoBlock.TATERS.sort(Comparator.comparing(x -> Registries.BLOCK.getId(x).getPath())); } private static T register(String id, T block) { diff --git a/src/main/java/xyz/nucleoid/extras/lobby/NEEntities.java b/src/main/java/xyz/nucleoid/extras/lobby/NEEntities.java index ae9b3764..f8eec0a8 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/NEEntities.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/NEEntities.java @@ -9,20 +9,28 @@ import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import xyz.nucleoid.extras.NucleoidExtras; +import xyz.nucleoid.extras.lobby.entity.LeaderboardDisplayEntity; import xyz.nucleoid.extras.lobby.entity.QuickArmorStandEntity; public class NEEntities { - public static final EntityType QUICK_ARMOR_STAND_ENTITY_TYPE = + public static final EntityType QUICK_ARMOR_STAND = FabricEntityTypeBuilder.create(SpawnGroup.MISC, QuickArmorStandEntity::new) .dimensions(EntityDimensions.fixed(0.5f, 1.975f)) .trackRangeChunks(2) .trackedUpdateRate(10) .build(); + public static final EntityType LEADERBOARD_DISPLAY = + FabricEntityTypeBuilder.create(SpawnGroup.MISC, LeaderboardDisplayEntity::new) + .dimensions(EntityDimensions.fixed(0f, 0f)) + .trackRangeChunks(2) + .trackedUpdateRate(10) + .build(); public static void register() { - register("quick_armor_stand", QUICK_ARMOR_STAND_ENTITY_TYPE); - FabricDefaultAttributeRegistry.register(QUICK_ARMOR_STAND_ENTITY_TYPE, QuickArmorStandEntity.createLivingAttributes()); + register("quick_armor_stand", QUICK_ARMOR_STAND); + register("leaderboard_display", LEADERBOARD_DISPLAY); + FabricDefaultAttributeRegistry.register(QUICK_ARMOR_STAND, QuickArmorStandEntity.createLivingAttributes()); } private static > T register(String id, T item) { diff --git a/src/main/java/xyz/nucleoid/extras/lobby/NEItems.java b/src/main/java/xyz/nucleoid/extras/lobby/NEItems.java index 30c97181..a71cde1b 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/NEItems.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/NEItems.java @@ -20,27 +20,34 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import xyz.nucleoid.extras.NucleoidExtras; import xyz.nucleoid.extras.NucleoidExtrasConfig; +import xyz.nucleoid.extras.lobby.block.tater.TinyPotatoBlock; import xyz.nucleoid.extras.lobby.item.*; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.function.Consumer; public class NEItems { + private static final List TATERS = new ArrayList<>(); + public static final ItemGroup ITEM_GROUP = PolymerItemGroupUtils.builder(NucleoidExtras.identifier("general")) .displayName(Text.translatable("text.nucleoid_extras.name")) .icon(() -> new ItemStack(NEItems.NUCLEOID_LOGO)) - .entries((enabledFeatures, entries, operatorEnabled) -> { - entries.add(NEItems.NUCLEOID_LOGO); + .entries((context, entries) -> { + entries.add(NEItems.QUICK_ARMOR_STAND); entries.add(NEItems.END_PORTAL); entries.add(NEItems.END_GATEWAY); entries.add(NEItems.SAFE_TNT); entries.add(NEItems.LAUNCH_FEATHER); entries.add(NEItems.GOLD_LAUNCH_PAD); entries.add(NEItems.IRON_LAUNCH_PAD); + entries.add(NEItems.CONTRIBUTOR_STATUE); entries.add(NEItems.INFINITE_DISPENSER); entries.add(NEItems.INFINITE_DROPPER); entries.add(NEItems.SNAKE_BLOCK); @@ -61,282 +68,15 @@ public class NEItems { entries.add(NEItems.RED_CONCRETE_POWDER); entries.add(NEItems.WHITE_CONCRETE_POWDER); entries.add(NEItems.YELLOW_CONCRETE_POWDER); - entries.add(NEItems.TINY_POTATO); - entries.add(NEItems.IRRITATER); - entries.add(NEItems.SAD_TATER); - entries.add(NEItems.FLOWERING_AZALEA_TATER); - entries.add(NEItems.STONE_TATER); - entries.add(NEItems.CALCITE_TATER); - entries.add(NEItems.TUFF_TATER); - entries.add(NEItems.BASALT_TATER); - entries.add(NEItems.DRIPSTONE_TATER); - entries.add(NEItems.AMETHYST_TATER); - entries.add(NEItems.PACKED_ICE_TATER); - entries.add(NEItems.BLUE_ICE_TATER); - entries.add(NEItems.FLAME_TATER); - entries.add(NEItems.PUZZLE_CUBE_TATER); - entries.add(NEItems.LUCKY_TATER); - entries.add(NEItems.CRATE_TATER); - entries.add(NEItems.TATER_OF_UNDYING); - entries.add(NEItems.CRYING_OBSIDIAN_TATER); - entries.add(NEItems.DICE_TATER); - entries.add(NEItems.TRANS_TATER); - entries.add(NEItems.ASEXUAL_TATER); - entries.add(NEItems.BI_TATER); - entries.add(NEItems.GAY_TATER); - entries.add(NEItems.LESBIAN_TATER); - entries.add(NEItems.NONBINARY_TATER); - entries.add(NEItems.PAN_TATER); - entries.add(NEItems.WARDEN_TATER); - entries.add(NEItems.VIRAL_TATER); - entries.add(NEItems.TATEROID); - entries.add(NEItems.RED_TATEROID); - entries.add(NEItems.ORANGE_TATEROID); - entries.add(NEItems.YELLOW_TATEROID); - entries.add(NEItems.GREEN_TATEROID); - entries.add(NEItems.BLUE_TATEROID); - entries.add(NEItems.PURPLE_TATEROID); - entries.add(NEItems.FLIPPED_TATER); - entries.add(NEItems.SANTA_HAT_TATER); - entries.add(NEItems.GENDERFLUID_TATER); - entries.add(NEItems.DEMISEXUAL_TATER); - entries.add(NEItems.SKELETATER); - entries.add(NEItems.WITHER_SKELETATER); - entries.add(NEItems.ZOMBIE_TATER); - entries.add(NEItems.CREEPER_TATER); - entries.add(NEItems.STEVE_TATER); - entries.add(NEItems.ALEX_TATER); - entries.add(NEItems.WHITE_TATER); - entries.add(NEItems.ORANGE_TATER); - entries.add(NEItems.MAGENTA_TATER); - entries.add(NEItems.LIGHT_BLUE_TATER); - entries.add(NEItems.YELLOW_TATER); - entries.add(NEItems.LIME_TATER); - entries.add(NEItems.PINK_TATER); - entries.add(NEItems.GRAY_TATER); - entries.add(NEItems.LIGHT_GRAY_TATER); - entries.add(NEItems.CYAN_TATER); - entries.add(NEItems.PURPLE_TATER); - entries.add(NEItems.BLUE_TATER); - entries.add(NEItems.BROWN_TATER); - entries.add(NEItems.GREEN_TATER); - entries.add(NEItems.RED_TATER); - entries.add(NEItems.BLACK_TATER); - entries.add(NEItems.COAL_TATER); - entries.add(NEItems.DIAMOND_TATER); - entries.add(NEItems.EMERALD_TATER); - entries.add(NEItems.GOLD_TATER); - entries.add(NEItems.IRON_TATER); - entries.add(NEItems.LAPIS_TATER); - entries.add(NEItems.NETHERITE_TATER); - entries.add(NEItems.QUARTZ_TATER); - entries.add(NEItems.REDSTONE_TATER); - entries.add(NEItems.COPPER_TATER); - entries.add(NEItems.EXPOSED_COPPER_TATER); - entries.add(NEItems.WEATHERED_COPPER_TATER); - entries.add(NEItems.OXIDIZED_COPPER_TATER); - entries.add(NEItems.CAKE_TATER); - entries.add(NEItems.ENDERTATER); - entries.add(NEItems.FURNACE_TATER); - entries.add(NEItems.MELON_TATER); - entries.add(NEItems.PUMPKIN_TATER); - entries.add(NEItems.JACK_O_TATER); - entries.add(NEItems.SCULK_TATER); - entries.add(NEItems.SLIME_TATER); - entries.add(NEItems.HEROBRINE_TATER); - entries.add(NEItems.OCHRE_FROGLIGHT_TATER); - entries.add(NEItems.PEARLESCENT_FROGLIGHT_TATER); - entries.add(NEItems.VERDANT_FROGLIGHT_TATER); - entries.add(NEItems.SNOWMAN_TATER); - entries.add(NEItems.ACACIA_TATER); - entries.add(NEItems.ANDESITE_TATER); - entries.add(NEItems.BAMBOO_TATER); - entries.add(NEItems.BEDROCK_TATER); - entries.add(NEItems.BIRCH_TATER); - entries.add(NEItems.BONE_TATER); - entries.add(NEItems.BRAIN_CORAL_TATER); - entries.add(NEItems.BRICK_TATER); - entries.add(NEItems.BUBBLE_CORAL_TATER); - entries.add(NEItems.CACTUS_TATER); - entries.add(NEItems.CHORUS_TATER); - entries.add(NEItems.CLAY_TATER); - entries.add(NEItems.CRIMSON_TATER); - entries.add(NEItems.DARK_OAK_TATER); - entries.add(NEItems.DARK_PRISMARINE_TATER); - entries.add(NEItems.DIORITE_TATER); - entries.add(NEItems.DIRT_TATER); - entries.add(NEItems.END_STONE_TATER); - entries.add(NEItems.FIRE_CORAL_TATER); - entries.add(NEItems.GRANITE_TATER); - entries.add(NEItems.GRASS_TATER); - entries.add(NEItems.HAY_TATER); - entries.add(NEItems.HONEY_TATER); - entries.add(NEItems.HONEYCOMB_TATER); - entries.add(NEItems.HORN_CORAL_TATER); - entries.add(NEItems.JUNGLE_TATER); - entries.add(NEItems.MYCELIUM_TATER); - entries.add(NEItems.NETHER_WART_TATER); - entries.add(NEItems.OAK_TATER); - entries.add(NEItems.OBSIDIAN_TATER); - entries.add(NEItems.PODZOL_TATER); - entries.add(NEItems.PRISMARINE_BRICK_TATER); - entries.add(NEItems.PRISMARINE_TATER); - entries.add(NEItems.RED_SAND_TATER); - entries.add(NEItems.SAND_TATER); - entries.add(NEItems.SEA_LANTERN_TATER); - entries.add(NEItems.SHROOMLIGHT_TATER); - entries.add(NEItems.SHULKER_TATER); - entries.add(NEItems.SMOOTH_STONE_TATER); - entries.add(NEItems.SOUL_SAND_TATER); - entries.add(NEItems.SPONGE_TATER); - entries.add(NEItems.SPRUCE_TATER); - entries.add(NEItems.STONE_BRICK_TATER); - entries.add(NEItems.TARGET_TATER); - entries.add(NEItems.TERRACOTTA_TATER); - entries.add(NEItems.TNTATER); - entries.add(NEItems.TUBE_CORAL_TATER); - entries.add(NEItems.WARPED_TATER); - entries.add(NEItems.WARPED_WART_TATER); - entries.add(NEItems.WOOL_TATER); - entries.add(NEItems.ACACIA_LOG_TATER); - entries.add(NEItems.ANGRY_BEE_TATER); - entries.add(NEItems.BEACON_TATER); - entries.add(NEItems.BEE_NEST_TATER); - entries.add(NEItems.BEE_TATER); - entries.add(NEItems.BEEHIVE_TATER); - entries.add(NEItems.BIRCH_LOG_TATER); - entries.add(NEItems.BLACKSTONE_TATER); - entries.add(NEItems.BLAZE_TATER); - entries.add(NEItems.BOOKSHELF_TATER); - entries.add(NEItems.BROWN_MOOSHROOM_TATER); - entries.add(NEItems.BROWN_MUSHROOM_TATER); - entries.add(NEItems.CAVE_SPIDER_TATER); - entries.add(NEItems.COBBLED_DEEPSLATE_TATER); - entries.add(NEItems.COBBLESTONE_TATER); - entries.add(NEItems.COCOA_TATER); - entries.add(NEItems.COLD_STRIDER_TATER); - entries.add(NEItems.COW_TATER); - entries.add(NEItems.CRAFTING_TATER); - entries.add(NEItems.CRIMSON_NYLIUM_TATER); - entries.add(NEItems.CRIMSON_STEM_TATER); - entries.add(NEItems.DARK_OAK_LOG_TATER); - entries.add(NEItems.DAYLIGHT_DETECTOR_TATER); - entries.add(NEItems.DEAD_BRAIN_CORAL_TATER); - entries.add(NEItems.DEAD_BUBBLE_CORAL_TATER); - entries.add(NEItems.DEAD_FIRE_CORAL_TATER); - entries.add(NEItems.DEAD_HORN_CORAL_TATER); - entries.add(NEItems.DEAD_TUBE_CORAL_TATER); - entries.add(NEItems.DEEPSLATE_BRICK_TATER); - entries.add(NEItems.DEEPSLATE_TATER); - entries.add(NEItems.DRIED_KELP_TATER); - entries.add(NEItems.DROWNED_TATER); - entries.add(NEItems.EYE_OF_ENDER_TATER); - entries.add(NEItems.FOX_TATER); - entries.add(NEItems.GHAST_TATER); - entries.add(NEItems.GILDED_BLACKSTONE_TATER); - entries.add(NEItems.GLOW_SQUID_TATER); - entries.add(NEItems.GLOWSTONE_TATER); - entries.add(NEItems.HUSK_TATER); - entries.add(NEItems.INVERTED_DAYLIGHT_DETECTOR_TATER); - entries.add(NEItems.JUNGLE_LOG_TATER); - entries.add(NEItems.MAGMA_CUBE_TATER); - entries.add(NEItems.MOOBLOOM_TATER); - entries.add(NEItems.MUDDY_PIG_TATER); - entries.add(NEItems.MUSHROOM_STEM_TATER); - entries.add(NEItems.NETHER_BRICK_TATER); - entries.add(NEItems.NETHERRACK_TATER); - entries.add(NEItems.OAK_LOG_TATER); - entries.add(NEItems.PIG_TATER); - entries.add(NEItems.POLAR_BEAR_TATER); - entries.add(NEItems.PUFFERTATER); - entries.add(NEItems.RED_MOOSHROOM_TATER); - entries.add(NEItems.RED_MUSHROOM_TATER); - entries.add(NEItems.RED_NETHER_BRICK_TATER); - entries.add(NEItems.RED_SANDSTONE_TATER); - entries.add(NEItems.RUBY_TATER); - entries.add(NEItems.SANDSTONE_TATER); - entries.add(NEItems.SEA_PICKLE_TATER); - entries.add(NEItems.SHEEP_TATER); - entries.add(NEItems.SHIELDED_WITHER_TATER); - entries.add(NEItems.SNOW_FOX_TATER); - entries.add(NEItems.SPIDER_TATER); - entries.add(NEItems.SPRUCE_LOG_TATER); - entries.add(NEItems.SQUID_TATER); - entries.add(NEItems.STRAY_TATER); - entries.add(NEItems.STRIDER_TATER); - entries.add(NEItems.TURTLE_EGG_TATER); - entries.add(NEItems.WARPED_NYLIUM_TATER); - entries.add(NEItems.WARPED_STEM_TATER); - entries.add(NEItems.WITHER_TATER); - entries.add(NEItems.AZALEA_TATER); - entries.add(NEItems.BELL_TATER); - entries.add(NEItems.COLD_FROG_TATER); - entries.add(NEItems.CONDUIT_TATER); - entries.add(NEItems.ELDER_GUARDIAN_TATER); - entries.add(NEItems.END_STONE_BRICK_TATER); - entries.add(NEItems.FLOWER_POT_TATER); - entries.add(NEItems.GUARDIAN_TATER); - entries.add(NEItems.ILLAGER_TATER); - entries.add(NEItems.ILLUSIONER_TATER); - entries.add(NEItems.JUKEBOX_TATER); - entries.add(NEItems.LANTERN_TATER); - entries.add(NEItems.PIGLIN_TATER); - entries.add(NEItems.PINK_WITHER_TATER); - entries.add(NEItems.PISTON_TATER); - entries.add(NEItems.PURPUR_TATER); - entries.add(NEItems.SOUL_LANTERN_TATER); - entries.add(NEItems.SOUL_SOIL_TATER); - entries.add(NEItems.STICKY_PISTON_TATER); - entries.add(NEItems.TEMPERATE_FROG_TATER); - entries.add(NEItems.UNDERWATER_TNTATER); - entries.add(NEItems.VEX_TATER); - entries.add(NEItems.VILLAGER_TATER); - entries.add(NEItems.VINDITATER); - entries.add(NEItems.WANDERING_TRADER_TATER); - entries.add(NEItems.WARM_FROG_TATER); - entries.add(NEItems.WAX_TATER); - entries.add(NEItems.WITCH_TATER); - entries.add(NEItems.ZOMBIE_VILLAGER_TATER); - entries.add(NEItems.ZOMBIFIED_PIGLIN_TATER); - entries.add(NEItems.BONE_SPIDER_TATER); - entries.add(NEItems.BOULDERING_ZOMBIE_TATER); - entries.add(NEItems.CHARGED_CREEPER_TATER); - entries.add(NEItems.LOBBER_ZOMBIE_TATER); - entries.add(NEItems.MOSSY_SKELETATER); - entries.add(NEItems.STRIPPED_ACACIA_LOG_TATER); - entries.add(NEItems.STRIPPED_BIRCH_LOG_TATER); - entries.add(NEItems.STRIPPED_CRIMSON_STEM_TATER); - entries.add(NEItems.STRIPPED_DARK_OAK_LOG_TATER); - entries.add(NEItems.STRIPPED_JUNGLE_LOG_TATER); - entries.add(NEItems.STRIPPED_OAK_LOG_TATER); - entries.add(NEItems.STRIPPED_SPRUCE_LOG_TATER); - entries.add(NEItems.STRIPPED_WARPED_STEM_TATER); - entries.add(NEItems.TROPICAL_SLIME_TATER); - entries.add(NEItems.APPLE_TATER); - entries.add(NEItems.GOLDEN_APPLE_TATER); - entries.add(NEItems.ICE_TATER); - entries.add(NEItems.KING_TATER); - entries.add(NEItems.RAW_COPPER_TATER); - entries.add(NEItems.RAW_GOLD_TATER); - entries.add(NEItems.RAW_IRON_TATER); - entries.add(NEItems.ALLAY_TATER); - entries.add(NEItems.MANGROVE_LOG_TATER); - entries.add(NEItems.MANGROVE_TATER); - entries.add(NEItems.MUD_BRICK_TATER); - entries.add(NEItems.MUD_TATER); - entries.add(NEItems.PACKED_MUD_TATER); - entries.add(NEItems.STRIPPED_MANGROVE_LOG_TATER); - entries.add(NEItems.BRONZE_CAPSULE_TATER); - entries.add(NEItems.SILVER_CAPSULE_TATER); - entries.add(NEItems.GOLD_CAPSULE_TATER); - entries.add(NEItems.CORRUPTATER); - TaterBoxItem.addToItemGroup(entries); - entries.add(NEItems.QUICK_ARMOR_STAND); entries.add(NEItems.GAME_PORTAL_OPENER); + entries.add(NEItems.TATER_BOX); + TaterBoxItem.addToItemGroup(entries); + TATERS.forEach(entries::add); }) .build(); public static final Item NUCLEOID_LOGO = createHead(NEBlocks.NUCLEOID_LOGO); + public static final Item NUCLE_PAST_LOGO = createHead(NEBlocks.NUCLE_PAST_LOGO); public static final Item END_PORTAL = createSimple(NEBlocks.END_PORTAL, Items.BLACK_CARPET); public static final Item END_GATEWAY = createSimple(NEBlocks.END_GATEWAY, Items.BLACK_WOOL); @@ -345,6 +85,8 @@ public class NEItems { public static final Item GOLD_LAUNCH_PAD = createSimple(NEBlocks.GOLD_LAUNCH_PAD, Items.LIGHT_WEIGHTED_PRESSURE_PLATE); public static final Item IRON_LAUNCH_PAD = createSimple(NEBlocks.IRON_LAUNCH_PAD, Items.HEAVY_WEIGHTED_PRESSURE_PLATE); + public static final Item CONTRIBUTOR_STATUE = createSimple(NEBlocks.CONTRIBUTOR_STATUE, Items.SMOOTH_STONE); + public static final Item INFINITE_DISPENSER = createSimple(NEBlocks.INFINITE_DISPENSER, Items.DISPENSER); public static final Item INFINITE_DROPPER = createSimple(NEBlocks.INFINITE_DROPPER, Items.DROPPER); public static final Item SNAKE_BLOCK = createSimple(NEBlocks.SNAKE_BLOCK, Items.LIME_CONCRETE); @@ -368,6 +110,7 @@ public class NEItems { public static final Item YELLOW_CONCRETE_POWDER = createSimple(NEBlocks.YELLOW_CONCRETE_POWDER, Items.YELLOW_CONCRETE_POWDER); public static final Item TINY_POTATO = createHead(NEBlocks.TINY_POTATO); + public static final Item BOTANICAL_TINY_POTATO = createHead(NEBlocks.BOTANICAL_TINY_POTATO); public static final Item IRRITATER = createHead(NEBlocks.IRRITATER); public static final Item SAD_TATER = createHead(NEBlocks.SAD_TATER); public static final Item FLOWERING_AZALEA_TATER = createHead(NEBlocks.FLOWERING_AZALEA_TATER); @@ -403,6 +146,8 @@ public class NEItems { public static final Item BLUE_TATEROID = createHead(NEBlocks.BLUE_TATEROID); public static final Item PURPLE_TATEROID = createHead(NEBlocks.PURPLE_TATEROID); public static final Item FLIPPED_TATER = createHead(NEBlocks.FLIPPED_TATER); + public static final Item BACKWARD_TATER = createHead(NEBlocks.BACKWARD_TATER); + public static final Item UPWARD_TATER = createHead(NEBlocks.UPWARD_TATER); public static final Item SANTA_HAT_TATER = createHead(NEBlocks.SANTA_HAT_TATER); public static final Item GENDERFLUID_TATER = createHead(NEBlocks.GENDERFLUID_TATER); public static final Item DEMISEXUAL_TATER = createHead(NEBlocks.DEMISEXUAL_TATER); @@ -644,6 +389,12 @@ public class NEItems { public static final Item PACKED_MUD_TATER = createHead(NEBlocks.PACKED_MUD_TATER); public static final Item STRIPPED_MANGROVE_LOG_TATER = createHead(NEBlocks.STRIPPED_MANGROVE_LOG_TATER); + public static final Item LUCY_AXOLOTL_TATER = createHead(NEBlocks.LUCY_AXOLOTL_TATER); + public static final Item WILD_AXOLOTL_TATER = createHead(NEBlocks.WILD_AXOLOTL_TATER); + public static final Item GOLD_AXOLOTL_TATER = createHead(NEBlocks.GOLD_AXOLOTL_TATER); + public static final Item CYAN_AXOLOTL_TATER = createHead(NEBlocks.CYAN_AXOLOTL_TATER); + public static final Item BLUE_AXOLOTL_TATER = createHead(NEBlocks.BLUE_AXOLOTL_TATER); + public static final Item BRONZE_CAPSULE_TATER = createHead(NEBlocks.BRONZE_CAPSULE_TATER); public static final Item SILVER_CAPSULE_TATER = createHead(NEBlocks.SILVER_CAPSULE_TATER); public static final Item GOLD_CAPSULE_TATER = createHead(NEBlocks.GOLD_CAPSULE_TATER); @@ -656,7 +407,13 @@ public class NEItems { public static final Item LAUNCH_FEATHER = new LaunchFeatherItem(new Item.Settings().maxCount(1)); private static Item createHead(Block head) { - return new LobbyHeadItem((PolymerHeadBlock) head, new Item.Settings()); + if (head instanceof TinyPotatoBlock tinyPotatoBlock) { + return new LobbyHeadItem(head, new Item.Settings(), tinyPotatoBlock.getItemTexture()); + } else if (head instanceof PolymerHeadBlock headBlock) { + return new LobbyHeadItem(head, new Item.Settings(), headBlock.getPolymerSkinValue(head.getDefaultState(), BlockPos.ORIGIN, null)); + } + + return createSimple(head, Items.STONE); } private static Item createSimple(Block block, Item virtual) { @@ -664,12 +421,12 @@ private static Item createSimple(Block block, Item virtual) { } public static void register() { - register("nucleoid_logo", NUCLEOID_LOGO); register("end_portal", END_PORTAL); register("end_gateway", END_GATEWAY); register("safe_tnt", SAFE_TNT); register("gold_launch_pad", GOLD_LAUNCH_PAD); register("iron_launch_pad", IRON_LAUNCH_PAD); + register("contributor_statue", CONTRIBUTOR_STATUE); register("infinite_dispenser", INFINITE_DISPENSER); register("infinite_dropper", INFINITE_DROPPER); register("snake_block", SNAKE_BLOCK); @@ -691,291 +448,302 @@ public static void register() { register("red_concrete_powder", RED_CONCRETE_POWDER); register("white_concrete_powder", WHITE_CONCRETE_POWDER); register("yellow_concrete_powder", YELLOW_CONCRETE_POWDER); - - register("tiny_potato", TINY_POTATO); - register("irritater", IRRITATER); - register("sad_tater", SAD_TATER); - register("flowering_azalea_tater", FLOWERING_AZALEA_TATER); - register("stone_tater", STONE_TATER); - register("calcite_tater", CALCITE_TATER); - register("tuff_tater", TUFF_TATER); - register("basalt_tater", BASALT_TATER); - register("dripstone_tater", DRIPSTONE_TATER); - register("amethyst_tater", AMETHYST_TATER); - register("packed_ice_tater", PACKED_ICE_TATER); - register("blue_ice_tater", BLUE_ICE_TATER); - register("flame_tater", FLAME_TATER); - - register("puzzle_cube_tater", PUZZLE_CUBE_TATER); - register("lucky_tater", LUCKY_TATER); - register("crate_tater", CRATE_TATER); - register("tater_of_undying", TATER_OF_UNDYING); - register("crying_obsidian_tater", CRYING_OBSIDIAN_TATER); - - register("dice_tater", DICE_TATER); - register("trans_tater", TRANS_TATER); - register("asexual_tater", ASEXUAL_TATER); - register("bi_tater", BI_TATER); - register("gay_tater", GAY_TATER); - register("lesbian_tater", LESBIAN_TATER); - register("nonbinary_tater", NONBINARY_TATER); - register("pan_tater", PAN_TATER); - register("warden_tater", WARDEN_TATER); - register("viral_tater", VIRAL_TATER); - register("tateroid", TATEROID); - register("red_tateroid", RED_TATEROID); - register("orange_tateroid", ORANGE_TATEROID); - register("yellow_tateroid", YELLOW_TATEROID); - register("green_tateroid", GREEN_TATEROID); - register("blue_tateroid", BLUE_TATEROID); - register("purple_tateroid", PURPLE_TATEROID); - register("flipped_tater", FLIPPED_TATER); - register("santa_hat_tater", SANTA_HAT_TATER); - register("genderfluid_tater", GENDERFLUID_TATER); - register("demisexual_tater", DEMISEXUAL_TATER); - - register("skeletater", SKELETATER); - register("wither_skeletater", WITHER_SKELETATER); - register("zombie_tater", ZOMBIE_TATER); - register("creeper_tater", CREEPER_TATER); - register("steve_tater", STEVE_TATER); - register("alex_tater", ALEX_TATER); - - register("white_tater", WHITE_TATER); - register("orange_tater", ORANGE_TATER); - register("magenta_tater", MAGENTA_TATER); - register("light_blue_tater", LIGHT_BLUE_TATER); - register("yellow_tater", YELLOW_TATER); - register("lime_tater", LIME_TATER); - register("pink_tater", PINK_TATER); - register("gray_tater", GRAY_TATER); - register("light_gray_tater", LIGHT_GRAY_TATER); - register("cyan_tater", CYAN_TATER); - register("purple_tater", PURPLE_TATER); - register("blue_tater", BLUE_TATER); - register("brown_tater", BROWN_TATER); - register("green_tater", GREEN_TATER); - register("red_tater", RED_TATER); - register("black_tater", BLACK_TATER); - - register("coal_tater", COAL_TATER); - register("diamond_tater", DIAMOND_TATER); - register("emerald_tater", EMERALD_TATER); - register("gold_tater", GOLD_TATER); - register("iron_tater", IRON_TATER); - register("lapis_tater", LAPIS_TATER); - register("netherite_tater", NETHERITE_TATER); - register("quartz_tater", QUARTZ_TATER); - register("redstone_tater", REDSTONE_TATER); - - register("copper_tater", COPPER_TATER); - register("exposed_copper_tater", EXPOSED_COPPER_TATER); - register("weathered_copper_tater", WEATHERED_COPPER_TATER); - register("oxidized_copper_tater", OXIDIZED_COPPER_TATER); - - register("cake_tater", CAKE_TATER); - register("endertater", ENDERTATER); - register("furnace_tater", FURNACE_TATER); - register("melon_tater", MELON_TATER); - register("pumpkin_tater", PUMPKIN_TATER); - register("jack_o_tater", JACK_O_TATER); - register("sculk_tater", SCULK_TATER); - register("slime_tater", SLIME_TATER); - register("herobrine_tater", HEROBRINE_TATER); - register("ochre_froglight_tater", OCHRE_FROGLIGHT_TATER); - register("pearlescent_froglight_tater", PEARLESCENT_FROGLIGHT_TATER); - register("verdant_froglight_tater", VERDANT_FROGLIGHT_TATER); - register("snowman_tater", SNOWMAN_TATER); - - register("acacia_tater", ACACIA_TATER); - register("andesite_tater", ANDESITE_TATER); - register("bamboo_tater", BAMBOO_TATER); - register("bedrock_tater", BEDROCK_TATER); - register("birch_tater", BIRCH_TATER); - register("bone_tater", BONE_TATER); - register("brain_coral_tater", BRAIN_CORAL_TATER); - register("brick_tater", BRICK_TATER); - register("bubble_coral_tater", BUBBLE_CORAL_TATER); - register("cactus_tater", CACTUS_TATER); - register("chorus_tater", CHORUS_TATER); - register("clay_tater", CLAY_TATER); - register("crimson_tater", CRIMSON_TATER); - register("dark_oak_tater", DARK_OAK_TATER); - register("dark_prismarine_tater", DARK_PRISMARINE_TATER); - register("diorite_tater", DIORITE_TATER); - register("dirt_tater", DIRT_TATER); - register("end_stone_tater", END_STONE_TATER); - register("fire_coral_tater", FIRE_CORAL_TATER); - register("granite_tater", GRANITE_TATER); - register("grass_tater", GRASS_TATER); - register("hay_tater", HAY_TATER); - register("honey_tater", HONEY_TATER); - register("honeycomb_tater", HONEYCOMB_TATER); - register("horn_coral_tater", HORN_CORAL_TATER); - register("jungle_tater", JUNGLE_TATER); - register("mycelium_tater", MYCELIUM_TATER); - register("nether_wart_tater", NETHER_WART_TATER); - register("oak_tater", OAK_TATER); - register("obsidian_tater", OBSIDIAN_TATER); - register("podzol_tater", PODZOL_TATER); - register("prismarine_brick_tater", PRISMARINE_BRICK_TATER); - register("prismarine_tater", PRISMARINE_TATER); - register("red_sand_tater", RED_SAND_TATER); - register("sand_tater", SAND_TATER); - register("sea_lantern_tater", SEA_LANTERN_TATER); - register("shroomlight_tater", SHROOMLIGHT_TATER); - register("shulker_tater", SHULKER_TATER); - register("smooth_stone_tater", SMOOTH_STONE_TATER); - register("soul_sand_tater", SOUL_SAND_TATER); - register("sponge_tater", SPONGE_TATER); - register("spruce_tater", SPRUCE_TATER); - register("stone_brick_tater", STONE_BRICK_TATER); - register("target_tater", TARGET_TATER); - register("terracotta_tater", TERRACOTTA_TATER); - register("tntater", TNTATER); - register("tube_coral_tater", TUBE_CORAL_TATER); - register("warped_tater", WARPED_TATER); - register("warped_wart_tater", WARPED_WART_TATER); - register("wool_tater", WOOL_TATER); - - register("acacia_log_tater", ACACIA_LOG_TATER); - register("angry_bee_tater", ANGRY_BEE_TATER); - register("beacon_tater", BEACON_TATER); - register("bee_nest_tater", BEE_NEST_TATER); - register("bee_tater", BEE_TATER); - register("beehive_tater", BEEHIVE_TATER); - register("birch_log_tater", BIRCH_LOG_TATER); - register("blackstone_tater", BLACKSTONE_TATER); - register("blaze_tater", BLAZE_TATER); - register("bookshelf_tater", BOOKSHELF_TATER); - register("brown_mooshroom_tater", BROWN_MOOSHROOM_TATER); - register("brown_mushroom_tater", BROWN_MUSHROOM_TATER); - register("cave_spider_tater", CAVE_SPIDER_TATER); - register("cobbled_deepslate_tater", COBBLED_DEEPSLATE_TATER); - register("cobblestone_tater", COBBLESTONE_TATER); - register("cocoa_tater", COCOA_TATER); - register("cold_strider_tater", COLD_STRIDER_TATER); - register("cow_tater", COW_TATER); - register("crafting_tater", CRAFTING_TATER); - register("crimson_nylium_tater", CRIMSON_NYLIUM_TATER); - register("crimson_stem_tater", CRIMSON_STEM_TATER); - register("dark_oak_log_tater", DARK_OAK_LOG_TATER); - register("daylight_detector_tater", DAYLIGHT_DETECTOR_TATER); - register("dead_brain_coral_tater", DEAD_BRAIN_CORAL_TATER); - register("dead_bubble_coral_tater", DEAD_BUBBLE_CORAL_TATER); - register("dead_fire_coral_tater", DEAD_FIRE_CORAL_TATER); - register("dead_horn_coral_tater", DEAD_HORN_CORAL_TATER); - register("dead_tube_coral_tater", DEAD_TUBE_CORAL_TATER); - register("deepslate_brick_tater", DEEPSLATE_BRICK_TATER); - register("deepslate_tater", DEEPSLATE_TATER); - register("dried_kelp_tater", DRIED_KELP_TATER); - register("drowned_tater", DROWNED_TATER); - register("eye_of_ender_tater", EYE_OF_ENDER_TATER); - register("fox_tater", FOX_TATER); - register("ghast_tater", GHAST_TATER); - register("gilded_blackstone_tater", GILDED_BLACKSTONE_TATER); - register("glow_squid_tater", GLOW_SQUID_TATER); - register("glowstone_tater", GLOWSTONE_TATER); - register("husk_tater", HUSK_TATER); - register("inverted_daylight_detector_tater", INVERTED_DAYLIGHT_DETECTOR_TATER); - register("jungle_log_tater", JUNGLE_LOG_TATER); - register("magma_cube_tater", MAGMA_CUBE_TATER); - register("moobloom_tater", MOOBLOOM_TATER); - register("muddy_pig_tater", MUDDY_PIG_TATER); - register("mushroom_stem_tater", MUSHROOM_STEM_TATER); - register("nether_brick_tater", NETHER_BRICK_TATER); - register("netherrack_tater", NETHERRACK_TATER); - register("oak_log_tater", OAK_LOG_TATER); - register("pig_tater", PIG_TATER); - register("polar_bear_tater", POLAR_BEAR_TATER); - register("puffertater", PUFFERTATER); - register("red_mooshroom_tater", RED_MOOSHROOM_TATER); - register("red_mushroom_tater", RED_MUSHROOM_TATER); - register("red_nether_brick_tater", RED_NETHER_BRICK_TATER); - register("red_sandstone_tater", RED_SANDSTONE_TATER); - register("ruby_tater", RUBY_TATER); - register("sandstone_tater", SANDSTONE_TATER); - register("sea_pickle_tater", SEA_PICKLE_TATER); - register("sheep_tater", SHEEP_TATER); - register("shielded_wither_tater", SHIELDED_WITHER_TATER); - register("snow_fox_tater", SNOW_FOX_TATER); - register("spider_tater", SPIDER_TATER); - register("spruce_log_tater", SPRUCE_LOG_TATER); - register("squid_tater", SQUID_TATER); - register("stray_tater", STRAY_TATER); - register("strider_tater", STRIDER_TATER); - register("turtle_egg_tater", TURTLE_EGG_TATER); - register("warped_nylium_tater", WARPED_NYLIUM_TATER); - register("warped_stem_tater", WARPED_STEM_TATER); - register("wither_tater", WITHER_TATER); - - register("azalea_tater", AZALEA_TATER); - register("bell_tater", BELL_TATER); - register("cold_frog_tater", COLD_FROG_TATER); - register("conduit_tater", CONDUIT_TATER); - register("elder_guardian_tater", ELDER_GUARDIAN_TATER); - register("end_stone_brick_tater", END_STONE_BRICK_TATER); - register("flower_pot_tater", FLOWER_POT_TATER); - register("guardian_tater", GUARDIAN_TATER); - register("illager_tater", ILLAGER_TATER); - register("illusioner_tater", ILLUSIONER_TATER); - register("jukebox_tater", JUKEBOX_TATER); - register("lantern_tater", LANTERN_TATER); - register("piglin_tater", PIGLIN_TATER); - register("pink_wither_tater", PINK_WITHER_TATER); - register("piston_tater", PISTON_TATER); - register("purpur_tater", PURPUR_TATER); - register("soul_lantern_tater", SOUL_LANTERN_TATER); - register("soul_soil_tater", SOUL_SOIL_TATER); - register("sticky_piston_tater", STICKY_PISTON_TATER); - register("temperate_frog_tater", TEMPERATE_FROG_TATER); - register("underwater_tntater", UNDERWATER_TNTATER); - register("vex_tater", VEX_TATER); - register("villager_tater", VILLAGER_TATER); - register("vinditater", VINDITATER); - register("wandering_trader_tater", WANDERING_TRADER_TATER); - register("warm_frog_tater", WARM_FROG_TATER); - register("wax_tater", WAX_TATER); - register("witch_tater", WITCH_TATER); - register("zombie_villager_tater", ZOMBIE_VILLAGER_TATER); - register("zombified_piglin_tater", ZOMBIFIED_PIGLIN_TATER); - - register("bone_spider_tater", BONE_SPIDER_TATER); - register("bouldering_zombie_tater", BOULDERING_ZOMBIE_TATER); - register("charged_creeper_tater", CHARGED_CREEPER_TATER); - register("lobber_zombie_tater", LOBBER_ZOMBIE_TATER); - register("mossy_skeletater", MOSSY_SKELETATER); - register("stripped_acacia_log_tater", STRIPPED_ACACIA_LOG_TATER); - register("stripped_birch_log_tater", STRIPPED_BIRCH_LOG_TATER); - register("stripped_crimson_stem_tater", STRIPPED_CRIMSON_STEM_TATER); - register("stripped_dark_oak_log_tater", STRIPPED_DARK_OAK_LOG_TATER); - register("stripped_jungle_log_tater", STRIPPED_JUNGLE_LOG_TATER); - register("stripped_oak_log_tater", STRIPPED_OAK_LOG_TATER); - register("stripped_spruce_log_tater", STRIPPED_SPRUCE_LOG_TATER); - register("stripped_warped_stem_tater", STRIPPED_WARPED_STEM_TATER); - register("tropical_slime_tater", TROPICAL_SLIME_TATER); - - register("apple_tater", APPLE_TATER); - register("golden_apple_tater", GOLDEN_APPLE_TATER); - register("ice_tater", ICE_TATER); - register("king_tater", KING_TATER); - register("raw_copper_tater", RAW_COPPER_TATER); - register("raw_gold_tater", RAW_GOLD_TATER); - register("raw_iron_tater", RAW_IRON_TATER); - - register("allay_tater", ALLAY_TATER); - register("mangrove_log_tater", MANGROVE_LOG_TATER); - register("mangrove_tater", MANGROVE_TATER); - register("mud_brick_tater", MUD_BRICK_TATER); - register("mud_tater", MUD_TATER); - register("packed_mud_tater", PACKED_MUD_TATER); - register("stripped_mangrove_log_tater", STRIPPED_MANGROVE_LOG_TATER); - - register("bronze_capsule_tater", BRONZE_CAPSULE_TATER); - register("silver_capsule_tater", SILVER_CAPSULE_TATER); - register("gold_capsule_tater", GOLD_CAPSULE_TATER); - - register("corruptater", CORRUPTATER); + registerTater("nucleoid_logo", NUCLEOID_LOGO); + registerTater("nucle_past_logo", NUCLE_PAST_LOGO); + + registerTater("tiny_potato", TINY_POTATO); + registerTater("botanical_potato", BOTANICAL_TINY_POTATO); + registerTater("irritater", IRRITATER); + registerTater("sad_tater", SAD_TATER); + registerTater("flowering_azalea_tater", FLOWERING_AZALEA_TATER); + registerTater("stone_tater", STONE_TATER); + registerTater("calcite_tater", CALCITE_TATER); + registerTater("tuff_tater", TUFF_TATER); + registerTater("basalt_tater", BASALT_TATER); + registerTater("dripstone_tater", DRIPSTONE_TATER); + registerTater("amethyst_tater", AMETHYST_TATER); + registerTater("packed_ice_tater", PACKED_ICE_TATER); + registerTater("blue_ice_tater", BLUE_ICE_TATER); + registerTater("flame_tater", FLAME_TATER); + + registerTater("puzzle_cube_tater", PUZZLE_CUBE_TATER); + registerTater("lucky_tater", LUCKY_TATER); + registerTater("crate_tater", CRATE_TATER); + registerTater("tater_of_undying", TATER_OF_UNDYING); + registerTater("crying_obsidian_tater", CRYING_OBSIDIAN_TATER); + + registerTater("dice_tater", DICE_TATER); + registerTater("trans_tater", TRANS_TATER); + registerTater("asexual_tater", ASEXUAL_TATER); + registerTater("bi_tater", BI_TATER); + registerTater("gay_tater", GAY_TATER); + registerTater("lesbian_tater", LESBIAN_TATER); + registerTater("nonbinary_tater", NONBINARY_TATER); + registerTater("pan_tater", PAN_TATER); + registerTater("warden_tater", WARDEN_TATER); + registerTater("viral_tater", VIRAL_TATER); + registerTater("tateroid", TATEROID); + registerTater("red_tateroid", RED_TATEROID); + registerTater("orange_tateroid", ORANGE_TATEROID); + registerTater("yellow_tateroid", YELLOW_TATEROID); + registerTater("green_tateroid", GREEN_TATEROID); + registerTater("blue_tateroid", BLUE_TATEROID); + registerTater("purple_tateroid", PURPLE_TATEROID); + registerTater("flipped_tater", FLIPPED_TATER); + registerTater("backward_tater", BACKWARD_TATER); + registerTater("upward_tater", UPWARD_TATER); + registerTater("santa_hat_tater", SANTA_HAT_TATER); + registerTater("genderfluid_tater", GENDERFLUID_TATER); + registerTater("demisexual_tater", DEMISEXUAL_TATER); + + registerTater("skeletater", SKELETATER); + registerTater("wither_skeletater", WITHER_SKELETATER); + registerTater("zombie_tater", ZOMBIE_TATER); + registerTater("creeper_tater", CREEPER_TATER); + registerTater("steve_tater", STEVE_TATER); + registerTater("alex_tater", ALEX_TATER); + + registerTater("white_tater", WHITE_TATER); + registerTater("orange_tater", ORANGE_TATER); + registerTater("magenta_tater", MAGENTA_TATER); + registerTater("light_blue_tater", LIGHT_BLUE_TATER); + registerTater("yellow_tater", YELLOW_TATER); + registerTater("lime_tater", LIME_TATER); + registerTater("pink_tater", PINK_TATER); + registerTater("gray_tater", GRAY_TATER); + registerTater("light_gray_tater", LIGHT_GRAY_TATER); + registerTater("cyan_tater", CYAN_TATER); + registerTater("purple_tater", PURPLE_TATER); + registerTater("blue_tater", BLUE_TATER); + registerTater("brown_tater", BROWN_TATER); + registerTater("green_tater", GREEN_TATER); + registerTater("red_tater", RED_TATER); + registerTater("black_tater", BLACK_TATER); + + registerTater("coal_tater", COAL_TATER); + registerTater("diamond_tater", DIAMOND_TATER); + registerTater("emerald_tater", EMERALD_TATER); + registerTater("gold_tater", GOLD_TATER); + registerTater("iron_tater", IRON_TATER); + registerTater("lapis_tater", LAPIS_TATER); + registerTater("netherite_tater", NETHERITE_TATER); + registerTater("quartz_tater", QUARTZ_TATER); + registerTater("redstone_tater", REDSTONE_TATER); + + registerTater("copper_tater", COPPER_TATER); + registerTater("exposed_copper_tater", EXPOSED_COPPER_TATER); + registerTater("weathered_copper_tater", WEATHERED_COPPER_TATER); + registerTater("oxidized_copper_tater", OXIDIZED_COPPER_TATER); + + registerTater("cake_tater", CAKE_TATER); + registerTater("endertater", ENDERTATER); + registerTater("furnace_tater", FURNACE_TATER); + registerTater("melon_tater", MELON_TATER); + registerTater("pumpkin_tater", PUMPKIN_TATER); + registerTater("jack_o_tater", JACK_O_TATER); + registerTater("sculk_tater", SCULK_TATER); + registerTater("slime_tater", SLIME_TATER); + registerTater("herobrine_tater", HEROBRINE_TATER); + registerTater("ochre_froglight_tater", OCHRE_FROGLIGHT_TATER); + registerTater("pearlescent_froglight_tater", PEARLESCENT_FROGLIGHT_TATER); + registerTater("verdant_froglight_tater", VERDANT_FROGLIGHT_TATER); + registerTater("snowman_tater", SNOWMAN_TATER); + + registerTater("acacia_tater", ACACIA_TATER); + registerTater("andesite_tater", ANDESITE_TATER); + registerTater("bamboo_tater", BAMBOO_TATER); + registerTater("bedrock_tater", BEDROCK_TATER); + registerTater("birch_tater", BIRCH_TATER); + registerTater("bone_tater", BONE_TATER); + registerTater("brain_coral_tater", BRAIN_CORAL_TATER); + registerTater("brick_tater", BRICK_TATER); + registerTater("bubble_coral_tater", BUBBLE_CORAL_TATER); + registerTater("cactus_tater", CACTUS_TATER); + registerTater("chorus_tater", CHORUS_TATER); + registerTater("clay_tater", CLAY_TATER); + registerTater("crimson_tater", CRIMSON_TATER); + registerTater("dark_oak_tater", DARK_OAK_TATER); + registerTater("dark_prismarine_tater", DARK_PRISMARINE_TATER); + registerTater("diorite_tater", DIORITE_TATER); + registerTater("dirt_tater", DIRT_TATER); + registerTater("end_stone_tater", END_STONE_TATER); + registerTater("fire_coral_tater", FIRE_CORAL_TATER); + registerTater("granite_tater", GRANITE_TATER); + registerTater("grass_tater", GRASS_TATER); + registerTater("hay_tater", HAY_TATER); + registerTater("honey_tater", HONEY_TATER); + registerTater("honeycomb_tater", HONEYCOMB_TATER); + registerTater("horn_coral_tater", HORN_CORAL_TATER); + registerTater("jungle_tater", JUNGLE_TATER); + registerTater("mycelium_tater", MYCELIUM_TATER); + registerTater("nether_wart_tater", NETHER_WART_TATER); + registerTater("oak_tater", OAK_TATER); + registerTater("obsidian_tater", OBSIDIAN_TATER); + registerTater("podzol_tater", PODZOL_TATER); + registerTater("prismarine_brick_tater", PRISMARINE_BRICK_TATER); + registerTater("prismarine_tater", PRISMARINE_TATER); + registerTater("red_sand_tater", RED_SAND_TATER); + registerTater("sand_tater", SAND_TATER); + registerTater("sea_lantern_tater", SEA_LANTERN_TATER); + registerTater("shroomlight_tater", SHROOMLIGHT_TATER); + registerTater("shulker_tater", SHULKER_TATER); + registerTater("smooth_stone_tater", SMOOTH_STONE_TATER); + registerTater("soul_sand_tater", SOUL_SAND_TATER); + registerTater("sponge_tater", SPONGE_TATER); + registerTater("spruce_tater", SPRUCE_TATER); + registerTater("stone_brick_tater", STONE_BRICK_TATER); + registerTater("target_tater", TARGET_TATER); + registerTater("terracotta_tater", TERRACOTTA_TATER); + registerTater("tntater", TNTATER); + registerTater("tube_coral_tater", TUBE_CORAL_TATER); + registerTater("warped_tater", WARPED_TATER); + registerTater("warped_wart_tater", WARPED_WART_TATER); + registerTater("wool_tater", WOOL_TATER); + + registerTater("acacia_log_tater", ACACIA_LOG_TATER); + registerTater("angry_bee_tater", ANGRY_BEE_TATER); + registerTater("beacon_tater", BEACON_TATER); + registerTater("bee_nest_tater", BEE_NEST_TATER); + registerTater("bee_tater", BEE_TATER); + registerTater("beehive_tater", BEEHIVE_TATER); + registerTater("birch_log_tater", BIRCH_LOG_TATER); + registerTater("blackstone_tater", BLACKSTONE_TATER); + registerTater("blaze_tater", BLAZE_TATER); + registerTater("bookshelf_tater", BOOKSHELF_TATER); + registerTater("brown_mooshroom_tater", BROWN_MOOSHROOM_TATER); + registerTater("brown_mushroom_tater", BROWN_MUSHROOM_TATER); + registerTater("cave_spider_tater", CAVE_SPIDER_TATER); + registerTater("cobbled_deepslate_tater", COBBLED_DEEPSLATE_TATER); + registerTater("cobblestone_tater", COBBLESTONE_TATER); + registerTater("cocoa_tater", COCOA_TATER); + registerTater("cold_strider_tater", COLD_STRIDER_TATER); + registerTater("cow_tater", COW_TATER); + registerTater("crafting_tater", CRAFTING_TATER); + registerTater("crimson_nylium_tater", CRIMSON_NYLIUM_TATER); + registerTater("crimson_stem_tater", CRIMSON_STEM_TATER); + registerTater("dark_oak_log_tater", DARK_OAK_LOG_TATER); + registerTater("daylight_detector_tater", DAYLIGHT_DETECTOR_TATER); + registerTater("dead_brain_coral_tater", DEAD_BRAIN_CORAL_TATER); + registerTater("dead_bubble_coral_tater", DEAD_BUBBLE_CORAL_TATER); + registerTater("dead_fire_coral_tater", DEAD_FIRE_CORAL_TATER); + registerTater("dead_horn_coral_tater", DEAD_HORN_CORAL_TATER); + registerTater("dead_tube_coral_tater", DEAD_TUBE_CORAL_TATER); + registerTater("deepslate_brick_tater", DEEPSLATE_BRICK_TATER); + registerTater("deepslate_tater", DEEPSLATE_TATER); + registerTater("dried_kelp_tater", DRIED_KELP_TATER); + registerTater("drowned_tater", DROWNED_TATER); + registerTater("eye_of_ender_tater", EYE_OF_ENDER_TATER); + registerTater("fox_tater", FOX_TATER); + registerTater("ghast_tater", GHAST_TATER); + registerTater("gilded_blackstone_tater", GILDED_BLACKSTONE_TATER); + registerTater("glow_squid_tater", GLOW_SQUID_TATER); + registerTater("glowstone_tater", GLOWSTONE_TATER); + registerTater("husk_tater", HUSK_TATER); + registerTater("inverted_daylight_detector_tater", INVERTED_DAYLIGHT_DETECTOR_TATER); + registerTater("jungle_log_tater", JUNGLE_LOG_TATER); + registerTater("magma_cube_tater", MAGMA_CUBE_TATER); + registerTater("moobloom_tater", MOOBLOOM_TATER); + registerTater("muddy_pig_tater", MUDDY_PIG_TATER); + registerTater("mushroom_stem_tater", MUSHROOM_STEM_TATER); + registerTater("nether_brick_tater", NETHER_BRICK_TATER); + registerTater("netherrack_tater", NETHERRACK_TATER); + registerTater("oak_log_tater", OAK_LOG_TATER); + registerTater("pig_tater", PIG_TATER); + registerTater("polar_bear_tater", POLAR_BEAR_TATER); + registerTater("puffertater", PUFFERTATER); + registerTater("red_mooshroom_tater", RED_MOOSHROOM_TATER); + registerTater("red_mushroom_tater", RED_MUSHROOM_TATER); + registerTater("red_nether_brick_tater", RED_NETHER_BRICK_TATER); + registerTater("red_sandstone_tater", RED_SANDSTONE_TATER); + registerTater("ruby_tater", RUBY_TATER); + registerTater("sandstone_tater", SANDSTONE_TATER); + registerTater("sea_pickle_tater", SEA_PICKLE_TATER); + registerTater("sheep_tater", SHEEP_TATER); + registerTater("shielded_wither_tater", SHIELDED_WITHER_TATER); + registerTater("snow_fox_tater", SNOW_FOX_TATER); + registerTater("spider_tater", SPIDER_TATER); + registerTater("spruce_log_tater", SPRUCE_LOG_TATER); + registerTater("squid_tater", SQUID_TATER); + registerTater("stray_tater", STRAY_TATER); + registerTater("strider_tater", STRIDER_TATER); + registerTater("turtle_egg_tater", TURTLE_EGG_TATER); + registerTater("warped_nylium_tater", WARPED_NYLIUM_TATER); + registerTater("warped_stem_tater", WARPED_STEM_TATER); + registerTater("wither_tater", WITHER_TATER); + + registerTater("azalea_tater", AZALEA_TATER); + registerTater("bell_tater", BELL_TATER); + registerTater("cold_frog_tater", COLD_FROG_TATER); + registerTater("conduit_tater", CONDUIT_TATER); + registerTater("elder_guardian_tater", ELDER_GUARDIAN_TATER); + registerTater("end_stone_brick_tater", END_STONE_BRICK_TATER); + registerTater("flower_pot_tater", FLOWER_POT_TATER); + registerTater("guardian_tater", GUARDIAN_TATER); + registerTater("illager_tater", ILLAGER_TATER); + registerTater("illusioner_tater", ILLUSIONER_TATER); + registerTater("jukebox_tater", JUKEBOX_TATER); + registerTater("lantern_tater", LANTERN_TATER); + registerTater("piglin_tater", PIGLIN_TATER); + registerTater("pink_wither_tater", PINK_WITHER_TATER); + registerTater("piston_tater", PISTON_TATER); + registerTater("purpur_tater", PURPUR_TATER); + registerTater("soul_lantern_tater", SOUL_LANTERN_TATER); + registerTater("soul_soil_tater", SOUL_SOIL_TATER); + registerTater("sticky_piston_tater", STICKY_PISTON_TATER); + registerTater("temperate_frog_tater", TEMPERATE_FROG_TATER); + registerTater("underwater_tntater", UNDERWATER_TNTATER); + registerTater("vex_tater", VEX_TATER); + registerTater("villager_tater", VILLAGER_TATER); + registerTater("vinditater", VINDITATER); + registerTater("wandering_trader_tater", WANDERING_TRADER_TATER); + registerTater("warm_frog_tater", WARM_FROG_TATER); + registerTater("wax_tater", WAX_TATER); + registerTater("witch_tater", WITCH_TATER); + registerTater("zombie_villager_tater", ZOMBIE_VILLAGER_TATER); + registerTater("zombified_piglin_tater", ZOMBIFIED_PIGLIN_TATER); + + registerTater("bone_spider_tater", BONE_SPIDER_TATER); + registerTater("bouldering_zombie_tater", BOULDERING_ZOMBIE_TATER); + registerTater("charged_creeper_tater", CHARGED_CREEPER_TATER); + registerTater("lobber_zombie_tater", LOBBER_ZOMBIE_TATER); + registerTater("mossy_skeletater", MOSSY_SKELETATER); + registerTater("stripped_acacia_log_tater", STRIPPED_ACACIA_LOG_TATER); + registerTater("stripped_birch_log_tater", STRIPPED_BIRCH_LOG_TATER); + registerTater("stripped_crimson_stem_tater", STRIPPED_CRIMSON_STEM_TATER); + registerTater("stripped_dark_oak_log_tater", STRIPPED_DARK_OAK_LOG_TATER); + registerTater("stripped_jungle_log_tater", STRIPPED_JUNGLE_LOG_TATER); + registerTater("stripped_oak_log_tater", STRIPPED_OAK_LOG_TATER); + registerTater("stripped_spruce_log_tater", STRIPPED_SPRUCE_LOG_TATER); + registerTater("stripped_warped_stem_tater", STRIPPED_WARPED_STEM_TATER); + registerTater("tropical_slime_tater", TROPICAL_SLIME_TATER); + + registerTater("apple_tater", APPLE_TATER); + registerTater("golden_apple_tater", GOLDEN_APPLE_TATER); + registerTater("ice_tater", ICE_TATER); + registerTater("king_tater", KING_TATER); + registerTater("raw_copper_tater", RAW_COPPER_TATER); + registerTater("raw_gold_tater", RAW_GOLD_TATER); + registerTater("raw_iron_tater", RAW_IRON_TATER); + + registerTater("allay_tater", ALLAY_TATER); + registerTater("mangrove_log_tater", MANGROVE_LOG_TATER); + registerTater("mangrove_tater", MANGROVE_TATER); + registerTater("mud_brick_tater", MUD_BRICK_TATER); + registerTater("mud_tater", MUD_TATER); + registerTater("packed_mud_tater", PACKED_MUD_TATER); + registerTater("stripped_mangrove_log_tater", STRIPPED_MANGROVE_LOG_TATER); + + registerTater("lucy_axolotl_tater", LUCY_AXOLOTL_TATER); + registerTater("wild_axolotl_tater", WILD_AXOLOTL_TATER); + registerTater("gold_axolotl_tater", GOLD_AXOLOTL_TATER); + registerTater("cyan_axolotl_tater", CYAN_AXOLOTL_TATER); + registerTater("blue_axolotl_tater", BLUE_AXOLOTL_TATER); + + registerTater("bronze_capsule_tater", BRONZE_CAPSULE_TATER); + registerTater("silver_capsule_tater", SILVER_CAPSULE_TATER); + registerTater("gold_capsule_tater", GOLD_CAPSULE_TATER); + + registerTater("corruptater", CORRUPTATER); register("tater_box", TATER_BOX); register("quick_armor_stand", QUICK_ARMOR_STAND); @@ -1031,6 +799,12 @@ private static ActionResult onUseEntity(PlayerEntity player, World world, Hand h return ActionResult.PASS; } + private static T registerTater(String id, T item) { + register(id, item); + TATERS.add(item); + return item; + } + private static T register(String id, T item) { return Registry.register(Registries.ITEM, NucleoidExtras.identifier(id), item); } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/PlayerLobbyState.java b/src/main/java/xyz/nucleoid/extras/lobby/PlayerLobbyState.java new file mode 100644 index 00000000..6893356c --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/PlayerLobbyState.java @@ -0,0 +1,31 @@ +package xyz.nucleoid.extras.lobby; + +import eu.pb4.playerdata.api.PlayerDataApi; +import eu.pb4.playerdata.api.storage.JsonDataStorage; +import eu.pb4.playerdata.api.storage.PlayerDataStorage; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerEntity; +import xyz.nucleoid.extras.lobby.block.tater.TinyPotatoBlock; + +import java.util.HashSet; +import java.util.Set; + +public class PlayerLobbyState { + + public static final PlayerDataStorage STORAGE = new JsonDataStorage<>("nucleoid_extras", PlayerLobbyState.class); + public final Set collectedTaters = new HashSet<>(); + + public static PlayerLobbyState get(PlayerEntity player) { + if (!(player instanceof ServerPlayerEntity serverPlayer)) { + return new PlayerLobbyState(); + } + + var data = PlayerDataApi.getCustomDataFor(serverPlayer, STORAGE); + if (data == null) { + data = new PlayerLobbyState(); + PlayerDataApi.setCustomDataFor(serverPlayer, STORAGE, data); + } + + return data; + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/ContributorStatueBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/ContributorStatueBlock.java new file mode 100644 index 00000000..d4a83d34 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/ContributorStatueBlock.java @@ -0,0 +1,100 @@ +package xyz.nucleoid.extras.lobby.block; + +import java.util.List; + +import eu.pb4.polymer.core.api.block.PolymerBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.BlockWithEntity; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.item.ItemStack; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.state.StateManager.Builder; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Formatting; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; +import xyz.nucleoid.extras.lobby.NEBlocks; +import xyz.nucleoid.extras.lobby.contributor.ContributorData; + +public class ContributorStatueBlock extends BlockWithEntity implements PolymerBlock { + protected static final DirectionProperty FACING = Properties.HORIZONTAL_FACING; + + public ContributorStatueBlock(Settings settings) { + super(settings); + + this.setDefaultState(this.getDefaultState().with(FACING, Direction.NORTH)); + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (!world.isClient() && player.isCreativeLevelTwoOp()) { + var blockEntity = world.getBlockEntity(pos, NEBlocks.CONTRIBUTOR_STATUE_ENTITY); + + if (blockEntity.isPresent()) { + blockEntity.get().openEditScreen((ServerPlayerEntity) player); + return ActionResult.SUCCESS; + } + } + + return ActionResult.PASS; + } + + @Override + public Block getPolymerBlock(BlockState state) { + return Blocks.SMOOTH_STONE; + } + + @Override + public void onPolymerBlockSend(BlockState state, BlockPos.Mutable pos, ServerPlayerEntity player) { + player.getWorld().getBlockEntity(pos, NEBlocks.CONTRIBUTOR_STATUE_ENTITY).ifPresent(ContributorStatueBlockEntity::spawnHolograms); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext context) { + var facing = context.getHorizontalPlayerFacing().getOpposite(); + return super.getPlacementState(context).with(FACING, facing); + } + + @Override + protected void appendProperties(Builder builder) { + builder.add(FACING); + } + + @Override + public void appendTooltip(ItemStack stack, BlockView world, List tooltip, TooltipContext options) { + super.appendTooltip(stack, world, tooltip, options); + + var nbt = BlockItem.getBlockEntityNbt(stack); + + if (nbt != null) { + var contributorId = nbt.getString(ContributorStatueBlockEntity.CONTRIBUTOR_ID_KEY); + var contributor = ContributorData.getContributor(contributorId); + + if (contributor != null) { + tooltip.add(Text.translatable("block.nucleoid_extras.contributor_statue.contributor", contributor.getName()).formatted(Formatting.GRAY)); + } + + if (options.isAdvanced()) { + tooltip.add(Text.translatable("block.nucleoid_extras.contributor_statue.contributor_id", contributorId).formatted(Formatting.GRAY)); + } + } + } + + @Override + public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { + return new ContributorStatueBlockEntity(pos, state); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/ContributorStatueBlockEntity.java b/src/main/java/xyz/nucleoid/extras/lobby/block/ContributorStatueBlockEntity.java new file mode 100644 index 00000000..6c921bc7 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/ContributorStatueBlockEntity.java @@ -0,0 +1,255 @@ +package xyz.nucleoid.extras.lobby.block; + +import java.time.LocalDate; +import java.time.temporal.ChronoField; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.mojang.datafixers.util.Pair; + +import eu.pb4.holograms.api.elements.clickable.EntityHologramElement; +import eu.pb4.holograms.api.holograms.AbstractHologram; +import eu.pb4.holograms.api.holograms.WorldHologram; +import eu.pb4.sgui.api.elements.GuiElementBuilder; +import eu.pb4.sgui.api.elements.GuiElementInterface; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.entity.mob.DrownedEntity; +import net.minecraft.entity.mob.HuskEntity; +import net.minecraft.entity.mob.SkeletonEntity; +import net.minecraft.entity.mob.StrayEntity; +import net.minecraft.entity.mob.ZombieEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.s2c.play.EntityEquipmentUpdateS2CPacket; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.text.Text; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import xyz.nucleoid.extras.lobby.NEBlocks; +import xyz.nucleoid.extras.lobby.contributor.Contributor; +import xyz.nucleoid.extras.lobby.contributor.ContributorData; +import xyz.nucleoid.extras.lobby.item.TaterBoxItem; +import xyz.nucleoid.extras.mixin.lobby.LivingEntityAccessor; +import xyz.nucleoid.extras.util.PagedGui; + +public class ContributorStatueBlockEntity extends BlockEntity { + protected static final String CONTRIBUTOR_ID_KEY = "contributor_id"; + + private static final Text GUI_TITLE = Text.translatable("text.nucleoid_extras.contributor_statue.title"); + + private static final List> SPOOKY_ENTITIES = ImmutableList.of( + ZombieEntity::new, + world -> new DrownedEntity(EntityType.DROWNED, world), + world -> new HuskEntity(EntityType.HUSK, world), + world -> new SkeletonEntity(EntityType.SKELETON, world), + world -> new StrayEntity(EntityType.STRAY, world) + ); + + private String contributorId = ""; + + private WorldHologram hologram; + + public ContributorStatueBlockEntity(BlockPos pos, BlockState state) { + super(NEBlocks.CONTRIBUTOR_STATUE_ENTITY, pos, state); + } + + private Entity getHologramEntity() { + LocalDate date = LocalDate.now(); + + int month = date.get(ChronoField.MONTH_OF_YEAR); + int day = date.get(ChronoField.DAY_OF_MONTH); + + if (month == 10 && day == 31) { + int index = Math.floorMod(this.contributorId.hashCode(), SPOOKY_ENTITIES.size()); + return SPOOKY_ENTITIES.get(index).apply(world); + } + + return new ArmorStandEntity(world, 0, 0, 0); + } + + public void spawnHolograms() { + if (this.hologram != null) return; + + var contributor = ContributorData.getContributor(this.contributorId); + if (contributor == null) return; + + double x = this.pos.getX() + 0.5; + double y = this.pos.getY() + 1; + double z = this.pos.getZ() + 0.5; + + var world = (ServerWorld) this.world; + this.hologram = new WorldHologram(world, new Vec3d(x, y, z)); + + var entity = this.getHologramEntity(); + contributor.fillEntity(world.getServer(), entity); + + entity.setYaw(entity.getYaw() + this.getCachedState().get(ContributorStatueBlock.FACING).asRotation()); + entity.setHeadYaw(entity.getYaw()); + entity.setBodyYaw(entity.getYaw()); + + this.hologram.addElement(new EquipmentEntityHologramElement(entity)); + this.hologram.show(); + } + + public void removeHolograms() { + if (this.hologram != null) { + this.hologram.hide(); + this.hologram = null; + } + } + + private void selectContributor(ServerPlayerEntity player, String id) { + if (this.contributorId.equals(id)) return; + + this.contributorId = id; + player.playSound(SoundEvents.UI_BUTTON_CLICK.value(), SoundCategory.MASTER, 1, 1); + + this.removeHolograms(); + this.spawnHolograms(); + + this.markDirty(); + } + + protected void openEditScreen(ServerPlayerEntity player) { + var server = player.getServer(); + + List elements = ContributorData.getContributors() + .stream() + .sorted((a, b) -> { + return a.getValue().compareTo(b.getValue()); + }) + .map(entry -> { + var id = entry.getKey(); + var contributor = entry.getValue(); + + var profile = contributor.createGameProfile(server); + + var builder = GuiElementBuilder.from(contributor.createPlayerHead(profile)) + .setName(contributor.getName()) + .setCallback(() -> { + this.selectContributor(player, id); + }); + + var element = builder.build(); + + contributor.loadGameProfileProperties(server, profile, fullProfile -> { + Contributor.writeSkullOwner(element.getItemStack(), fullProfile); + }); + + return element; + }) + .collect(Collectors.toList()); + + elements.add(0, new GuiElementBuilder(Items.BARRIER) + .setName(TaterBoxItem.NONE_TEXT) + .setCallback(() -> { + this.selectContributor(player, ""); + }) + .build()); + + var gui = PagedGui.of(player, elements); + gui.setTitle(GUI_TITLE); + + gui.open(); + } + + @Override + @SuppressWarnings("deprecation") + public void setCachedState(BlockState state) { + super.setCachedState(state); + + this.removeHolograms(); + this.spawnHolograms(); + } + + @Override + public void markRemoved() { + super.markRemoved(); + this.removeHolograms(); + } + + @Override + public void readNbt(NbtCompound nbt) { + super.readNbt(nbt); + this.contributorId = nbt.getString(CONTRIBUTOR_ID_KEY); + } + + @Override + protected void writeNbt(NbtCompound nbt) { + super.writeNbt(nbt); + nbt.putString(CONTRIBUTOR_ID_KEY, this.contributorId); + } + + private static class EquipmentEntityHologramElement extends EntityHologramElement { + public EquipmentEntityHologramElement(Entity entity) { + super(entity); + } + + @Override + public void createSpawnPackets(ServerPlayerEntity player, AbstractHologram hologram) { + super.createSpawnPackets(player, hologram); + + if (this.entity instanceof LivingEntity livingEntity) { + ArrayList> equipmentList = Lists.newArrayList(); + + for (EquipmentSlot slot : EquipmentSlot.values()) { + ItemStack stack = livingEntity.getEquippedStack(slot); + + if (!stack.isEmpty()) { + equipmentList.add(Pair.of(slot, stack.copy())); + } + } + + if (!equipmentList.isEmpty()) { + Packet packet = new EntityEquipmentUpdateS2CPacket(this.entity.getId(), equipmentList); + player.networkHandler.sendPacket(packet); + } + } + } + + @Override + public void onTick(AbstractHologram hologram) { + super.onTick(hologram); + + if (this.entity instanceof LivingEntityAccessor accessor) { + var equipmentChanges = accessor.callGetEquipmentChanges(); + + if (equipmentChanges != null && !equipmentChanges.isEmpty()) { + var list = new ArrayList>(equipmentChanges.size()); + + equipmentChanges.forEach((slot, stack) -> { + var stackCopy = stack.copy(); + list.add(Pair.of(slot, stackCopy)); + + switch (slot.getType()) { + case HAND -> accessor.callSetSyncedHandStack(slot, stackCopy); + case ARMOR -> accessor.callSetSyncedArmorStack(slot, stackCopy); + } + }); + + var packet = new EntityEquipmentUpdateS2CPacket(this.entity.getId(), list); + + for (ServerPlayerEntity player : hologram.getPlayerSet()) { + player.networkHandler.sendPacket(packet); + } + } + } + } + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/DiceTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/DiceTaterBlock.java deleted file mode 100644 index b4037db1..00000000 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/DiceTaterBlock.java +++ /dev/null @@ -1,93 +0,0 @@ -package xyz.nucleoid.extras.lobby.block; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.state.StateManager.Builder; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.random.Random; -import net.minecraft.world.World; - -public class DiceTaterBlock extends TinyPotatoBlock { - private static final int ROLLING_FACE = 0; - private static final int MAX_FACE = 6; - private static final int ROLLING_TICKS = 8; - private static final IntProperty FACE = IntProperty.of("face", ROLLING_FACE, MAX_FACE); - private static final String[] TEXTURES = { - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNzEwMTMwNSwKICAicHJvZmlsZUlkIiA6ICJjNjc3MGJjZWMzZjE0ODA3ODc4MTU0NWRhMGFmMDI1NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE2IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I0ZDQxMjY1NzRjM2RjYjk4NDc1NDdmMjlmMDRlNWRmNmNmMGZjNmQ4NjJiNGFiZTc1OTI2ZjM1OWQ1ZDZhOTEiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==", - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNjk2MzE5OCwKICAicHJvZmlsZUlkIiA6ICJjMGYzYjI3YTUwMDE0YzVhYjIxZDc5ZGRlMTAxZGZlMiIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDEzIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzU5YjU2OGUzZDRlYjUzMDllMzY2MGY0YWNmYzA0ZWNhYTg0ODI1ZDJmZTRhMTMxMjU5MWQxMjhiMjY4NTllYWYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==", - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNjkxNTMzMSwKICAicHJvZmlsZUlkIiA6ICI5MGQ1NDY0OGEzNWE0YmExYTI2Yjg1YTg4NTU4OGJlOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJFdW4wbWlhIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzc1M2UxOTYxZWJjMWRlNjJkZGIxMzE2ZGJhODQzNDhhN2FhOGMwN2MzMjJiOGY0ZThmNmY1OGY1NWNmMjgwNjAiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==", - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNjg0MjM1OCwKICAicHJvZmlsZUlkIiA6ICIyMWFlMDM2OWJhMDM0NGFkOGY1ZjhlM2JlYTMwOTQ3MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJWaXJhbF9BbmdlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81N2ViOGYwZTM2ZDk4ODE4Y2FlZTEwNjc2MjVkOGVhYTVkNzY2ZjUxZDBmN2ZhNzU1OTVhNDhmNDMwMzQ1OTg2IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=", - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNzAwNDIyMiwKICAicHJvZmlsZUlkIiA6ICJjNTZlMjI0MmNiZWY0MWE2ODdlMzI2MGRjMGNmOTM2MSIsCiAgInByb2ZpbGVOYW1lIiA6ICJMSlI3MzEwMCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82MTM3MzFkMjI0YmUxZmQxODRmZjc1OWE1ZTE3YTg5NmMzYzI2ZDM1MDU3YzZkOTk4OWYwN2FlN2ZmZTQ3MTIwIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=", - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNzA1MTk4MywKICAicHJvZmlsZUlkIiA6ICIxYTc1ZTNiYmI1NTk0MTc2OTVjMmY4NTY1YzNlMDAzZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUZXJvZmFyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2ExNGIwODA3OGJmOTdlODJiYjcwNTZiN2E0ZjgyMDYyNmE0MmZlNzIzOTVjYmJmMzNhMGVlYTcyYWYwZTdhMTIiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==", - "ewogICJ0aW1lc3RhbXAiIDogMTYzOTMzNzAyMjk5MSwKICAicHJvZmlsZUlkIiA6ICJiNjc3NTgwYzExYmU0ZjNiODI1OGM0YjBkNzNhNzg0ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJPZmZpY2lhbGx5SksiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOWM0MGJmNzBmMTY0OGI3ZWU0MzhhNmEyMjkwNDIyOGFiNWZiYmQ0OTI2YWYzMGFlOGFkZTRkZjAxYjhkNzQxMyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9", - }; - - public DiceTaterBlock(Settings settings) { - super(settings, ParticleTypes.POOF, null); - - this.setDefaultState(this.stateManager.getDefaultState().with(FACE, 1)); - } - - private boolean isRolling(BlockState state) { - return state.get(FACE) == ROLLING_FACE; - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - if (hand == Hand.OFF_HAND || this.isRolling(state)) { - return ActionResult.FAIL; - } - - if (world instanceof ServerWorld) { - world.setBlockState(pos, state.with(FACE, ROLLING_FACE)); - world.scheduleBlockTick(pos, this, ROLLING_TICKS); - - float pitch = 1.6f + world.getRandom().nextFloat() * 0.4f; - world.playSound(null, pos, SoundEvents.UI_CARTOGRAPHY_TABLE_TAKE_RESULT, SoundCategory.BLOCKS, 1, pitch); - } - - return ActionResult.SUCCESS; - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { - if (this.isRolling(state)) { - int face = world.getRandom().nextInt(MAX_FACE) + 1; - world.setBlockState(pos, state.with(FACE, face)); - } - } - - @Override - public boolean hasComparatorOutput(BlockState state) { - return true; - } - - @Override - public int getComparatorOutput(BlockState state, World world, BlockPos pos) { - int face = state.get(FACE); - return MathHelper.floor(face / 6f * 15f); - } - - @Override - protected void appendProperties(Builder builder) { - super.appendProperties(builder); - builder.add(FACE); - } - - @Override - public String getPolymerSkinValue(BlockState state, BlockPos pos, ServerPlayerEntity player) { - int face = state.get(FACE); - return TEXTURES[face]; - } -} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/BellTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BellTaterBlock.java similarity index 96% rename from src/main/java/xyz/nucleoid/extras/lobby/block/BellTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/BellTaterBlock.java index bbe5283f..7839eb68 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/BellTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BellTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import org.jetbrains.annotations.Nullable; import xyz.nucleoid.extras.lobby.NEBlocks; @@ -28,7 +28,7 @@ import net.minecraft.world.World; import net.minecraft.world.event.GameEvent; -public class BellTaterBlock extends TinyPotatoBlock implements BlockEntityProvider { +public class BellTaterBlock extends CubicPotatoBlock implements BlockEntityProvider { public static final BooleanProperty POWERED = Properties.POWERED; public BellTaterBlock(Settings settings, String texture) { diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/BellTaterBlockEntity.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BellTaterBlockEntity.java similarity index 99% rename from src/main/java/xyz/nucleoid/extras/lobby/block/BellTaterBlockEntity.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/BellTaterBlockEntity.java index 5fd93916..45d0d120 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/BellTaterBlockEntity.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BellTaterBlockEntity.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BotanicalPotatoBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BotanicalPotatoBlock.java new file mode 100644 index 00000000..d4ef8b68 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/BotanicalPotatoBlock.java @@ -0,0 +1,143 @@ +package xyz.nucleoid.extras.lobby.block.tater; + +import eu.pb4.polymer.core.api.utils.PolymerUtils; +import eu.pb4.polymer.virtualentity.api.BlockWithElementHolder; +import eu.pb4.polymer.virtualentity.api.ElementHolder; +import eu.pb4.polymer.virtualentity.api.attachment.BlockBoundAttachment; +import eu.pb4.polymer.virtualentity.api.attachment.HolderAttachment; +import eu.pb4.polymer.virtualentity.api.elements.ItemDisplayElement; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.render.model.json.ModelTransformationMode; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.item.ItemStack; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.Properties; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RotationAxis; +import net.minecraft.util.math.RotationPropertyHelper; +import net.minecraft.world.World; +import org.joml.Matrix4f; +import org.joml.Vector3f; +import xyz.nucleoid.extras.util.SkinEncoder; + +public class BotanicalPotatoBlock extends TinyPotatoBlock implements BlockWithElementHolder { + private final ItemStack upStack; + private final ItemStack downStack; + + public BotanicalPotatoBlock(Settings settings, String upperTexture, String lowerTexture, ParticleEffect particleEffect, int particleRate) { + super(settings.nonOpaque(), upperTexture, particleEffect, particleRate); + this.upStack = PolymerUtils.createPlayerHead(this.getItemTexture()); + this.downStack = PolymerUtils.createPlayerHead(SkinEncoder.encode(lowerTexture)); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + super.appendProperties(builder); + builder.add(Properties.ROTATION); + } + + public BlockState getPlacementState(ItemPlacementContext ctx) { + return this.getDefaultState().with(Properties.ROTATION, MathHelper.floor(RotationPropertyHelper.fromYaw(ctx.getPlayerYaw()))); + } + + @Override + public Block getPolymerBlock(BlockState state) { + return Blocks.BARRIER; + } + + @Override + public ElementHolder createElementHolder(BlockPos pos, BlockState initialBlockState) { + return new Model(initialBlockState); + } + + @Override + public boolean tickElementHolder(ServerWorld world, BlockPos pos, BlockState initialBlockState) { + return true; + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (hand == Hand.MAIN_HAND) { + var model = (Model) BlockBoundAttachment.get(world, pos).holder(); + + if (model.jumpTime < 0) { + model.jumpTime = 20; + } + } + + return super.onUse(state, world, pos, player, hand, hit); + } + + private class Model extends ElementHolder { + private final ItemDisplayElement upPart; + private final ItemDisplayElement downPart; + + private int jumpTime = 0; + private BlockState state; + private final Matrix4f mat = new Matrix4f(); + + Model(BlockState state) { + this.upPart = new ItemDisplayElement(BotanicalPotatoBlock.this.upStack); + this.downPart = new ItemDisplayElement(BotanicalPotatoBlock.this.downStack); + + this.upPart.setModelTransformation(ModelTransformationMode.FIXED); + this.downPart.setModelTransformation(ModelTransformationMode.FIXED); + this.upPart.setInterpolationDuration(1); + this.downPart.setInterpolationDuration(1); + this.state = state; + this.updateAnimation(); + this.addElement(this.upPart); + this.addElement(this.downPart); + } + + @Override + protected void onTick() { + if (this.jumpTime >= 0) { + this.updateAnimation(); + } + + this.jumpTime--; + } + + private void updateAnimation() { + mat.identity(); + mat.rotateY(-RotationPropertyHelper.toDegrees(state.get(Properties.ROTATION)) * MathHelper.RADIANS_PER_DEGREE); + + if (this.jumpTime > 0) { + // Math stolen from botania™ + // https://github.com/VazkiiMods/Botania/blob/bd5c644356fa0456efc3773c8829517f1f2c5808/Xplat/src/main/java/vazkii/botania/client/render/block_entity/TinyPotatoBlockEntityRenderer.java#L139 + float up = (float) Math.abs(Math.sin(this.jumpTime / 10f * Math.PI)) * 0.2F; + float rotZ = (float) Math.sin(this.jumpTime / 10f * Math.PI) * 2; + float wiggle = (float) Math.sin(this.jumpTime / 10f * Math.PI) * 0.05F; + + mat.translate(wiggle, up, 0F); + mat.rotate(RotationAxis.POSITIVE_Z.rotationDegrees(rotZ)); + } + + + this.upPart.setTransformation(mat); + mat.translate(new Vector3f(0, -0.25f, 0)); + this.downPart.setTransformation(mat); + + this.upPart.startInterpolation(); + this.downPart.startInterpolation(); + } + + @Override + public void notifyUpdate(HolderAttachment.UpdateType updateType) { + if (updateType == BlockBoundAttachment.BLOCK_STATE_UPDATE) { + this.state = BlockBoundAttachment.get(this).getBlockState(); + updateAnimation(); + } + } + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/CapsuleTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CapsuleTaterBlock.java similarity index 91% rename from src/main/java/xyz/nucleoid/extras/lobby/block/CapsuleTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/CapsuleTaterBlock.java index 72e2f38a..a477d872 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/CapsuleTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CapsuleTaterBlock.java @@ -1,5 +1,6 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; +import net.minecraft.block.AbstractBlock; import net.minecraft.particle.ParticleEffect; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; @@ -14,7 +15,7 @@ public class CapsuleTaterBlock extends ColorTaterBlock implements LuckyTaterDrop private final int weight; - public CapsuleTaterBlock(Settings settings, Vector3f color, int weight, String texture) { + public CapsuleTaterBlock(AbstractBlock.Settings settings, Vector3f color, int weight, String texture) { super(settings, color, texture); this.weight = weight; diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/ColorPatternTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/ColorPatternTaterBlock.java similarity index 85% rename from src/main/java/xyz/nucleoid/extras/lobby/block/ColorPatternTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/ColorPatternTaterBlock.java index b6eab633..26db0f3b 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/ColorPatternTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/ColorPatternTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.particle.DustParticleEffect; import net.minecraft.particle.ParticleEffect; @@ -6,7 +6,7 @@ import java.util.stream.Stream; -public class ColorPatternTaterBlock extends TinyPotatoBlock { +public class ColorPatternTaterBlock extends CubicPotatoBlock { private final ParticleEffect[] particleEffects; public ColorPatternTaterBlock(Settings settings, Vector3f[] pattern, String texture) { diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/ColorTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/ColorTaterBlock.java similarity index 82% rename from src/main/java/xyz/nucleoid/extras/lobby/block/ColorTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/ColorTaterBlock.java index 0d29d299..d0b5ec64 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/ColorTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/ColorTaterBlock.java @@ -1,11 +1,11 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.particle.DustParticleEffect; import net.minecraft.util.DyeColor; import net.minecraft.util.math.Vec3d; import org.joml.Vector3f; -public class ColorTaterBlock extends TinyPotatoBlock { +public class ColorTaterBlock extends CubicPotatoBlock { public ColorTaterBlock(Settings settings, Vector3f color, String texture) { super(settings, new DustParticleEffect(color, 1), texture); } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/CorruptaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CorruptaterBlock.java similarity index 71% rename from src/main/java/xyz/nucleoid/extras/lobby/block/CorruptaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/CorruptaterBlock.java index 431defb1..9a407351 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/CorruptaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CorruptaterBlock.java @@ -1,6 +1,7 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import eu.pb4.polymer.core.api.utils.PolymerUtils; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.BlockState; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; @@ -9,9 +10,9 @@ import java.util.Random; -public final class CorruptaterBlock extends TinyPotatoBlock { +public final class CorruptaterBlock extends CubicPotatoBlock { private final Random random = new Random(); - public CorruptaterBlock(Settings settings, int particleRate) { + public CorruptaterBlock(AbstractBlock.Settings settings, int particleRate) { super(settings, ParticleTypes.ENTITY_EFFECT, PolymerUtils.NO_TEXTURE_HEAD_VALUE, particleRate); } @@ -26,8 +27,8 @@ public String getPolymerSkinValue(BlockState state, BlockPos pos, ServerPlayerEn return tater.getPolymerSkinValue(tater.getDefaultState(), pos, player); } - private TinyPotatoBlock getTater() { - return TinyPotatoBlock.TATERS.get(random.nextInt(TinyPotatoBlock.TATERS.size())); + private CubicPotatoBlock getTater() { + return CubicPotatoBlock.CUBIC_TATERS.get(random.nextInt(CubicPotatoBlock.CUBIC_TATERS.size())); } @Override diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CubicPotatoBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CubicPotatoBlock.java new file mode 100644 index 00000000..2af2d4d2 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/CubicPotatoBlock.java @@ -0,0 +1,77 @@ +package xyz.nucleoid.extras.lobby.block.tater; + +import eu.pb4.polymer.core.api.block.PolymerHeadBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.item.ItemStack; +import net.minecraft.particle.BlockStateParticleEffect; +import net.minecraft.particle.ItemStackParticleEffect; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.Properties; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RotationPropertyHelper; +import xyz.nucleoid.extras.util.SkinEncoder; + +import java.util.ArrayList; +import java.util.List; + +public class CubicPotatoBlock extends TinyPotatoBlock implements PolymerHeadBlock { + protected static final List CUBIC_TATERS = new ArrayList<>(); + + public CubicPotatoBlock(Settings settings, ParticleEffect particleEffect, String texture, int particleRate) { + super(settings, texture, particleEffect, particleRate); + CUBIC_TATERS.add(this); + } + + public CubicPotatoBlock(Settings settings, ParticleEffect particleEffect, String texture) { + this(settings, particleEffect, texture, 2); + } + + public CubicPotatoBlock(Settings settings, BlockState particleState, String texture) { + this(settings, new BlockStateParticleEffect(ParticleTypes.BLOCK, particleState), texture); + } + + public CubicPotatoBlock(Settings settings, Block particleBlock, String texture) { + this(settings, particleBlock.getDefaultState(), texture); + } + + public CubicPotatoBlock(Settings settings, ItemStack particleStack, String texture) { + this(settings, new ItemStackParticleEffect(ParticleTypes.ITEM, particleStack), texture); + } + + public CubicPotatoBlock(Settings settings, Item particleItem, String texture) { + this(settings, new ItemStack(particleItem), texture); + } + + @Override + public String getPolymerSkinValue(BlockState state, BlockPos pos, ServerPlayerEntity player) { + return this.getItemTexture(); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + super.appendProperties(builder); + builder.add(Properties.ROTATION); + } + + public BlockState getPlacementState(ItemPlacementContext ctx) { + return this.getDefaultState().with(Properties.ROTATION, MathHelper.floor(RotationPropertyHelper.fromYaw(ctx.getPlayerYaw()))); + } + + @Override + public Block getPolymerBlock(BlockState state) { + return Blocks.PLAYER_HEAD; + } + + @Override + public BlockState getPolymerBlockState(BlockState state) { + return Blocks.PLAYER_HEAD.getDefaultState().with(Properties.ROTATION, state.get(Properties.ROTATION)); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/DaylightDetectorTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DaylightDetectorTaterBlock.java similarity index 95% rename from src/main/java/xyz/nucleoid/extras/lobby/block/DaylightDetectorTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/DaylightDetectorTaterBlock.java index 230551f4..431f4ac1 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/DaylightDetectorTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DaylightDetectorTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import org.jetbrains.annotations.Nullable; import xyz.nucleoid.extras.lobby.NEBlocks; @@ -21,7 +21,7 @@ import net.minecraft.world.LightType; import net.minecraft.world.World; -public class DaylightDetectorTaterBlock extends TinyPotatoBlock implements BlockEntityProvider { +public class DaylightDetectorTaterBlock extends CubicPotatoBlock implements BlockEntityProvider { public static final IntProperty POWER = Properties.POWER; public final boolean inverted; diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/DaylightDetectorTaterBlockEntity.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DaylightDetectorTaterBlockEntity.java similarity index 89% rename from src/main/java/xyz/nucleoid/extras/lobby/block/DaylightDetectorTaterBlockEntity.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/DaylightDetectorTaterBlockEntity.java index 61431c25..cfe9d0f2 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/DaylightDetectorTaterBlockEntity.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DaylightDetectorTaterBlockEntity.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import xyz.nucleoid.extras.lobby.NEBlocks; diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DiceTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DiceTaterBlock.java new file mode 100644 index 00000000..fec084dd --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/DiceTaterBlock.java @@ -0,0 +1,94 @@ +package xyz.nucleoid.extras.lobby.block.tater; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; +import net.minecraft.state.StateManager.Builder; +import net.minecraft.state.property.IntProperty; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; +import xyz.nucleoid.extras.util.SkinEncoder; + +public class DiceTaterBlock extends CubicPotatoBlock { + private static final int ROLLING_FACE = 0; + private static final int MAX_FACE = 6; + private static final int ROLLING_TICKS = 8; + private static final IntProperty FACE = IntProperty.of("face", ROLLING_FACE, MAX_FACE); + private static final String[] TEXTURES = { + SkinEncoder.encode("b4d4126574c3dcb9847547f29f04e5df6cf0fc6d862b4abe75926f359d5d6a91"), + SkinEncoder.encode("59b568e3d4eb5309e3660f4acfc04ecaa84825d2fe4a1312591d128b26859eaf"), + SkinEncoder.encode("753e1961ebc1de62ddb1316dba84348a7aa8c07c322b8f4e8f6f58f55cf28060"), + SkinEncoder.encode("57eb8f0e36d98818caee1067625d8eaa5d766f51d0f7fa75595a48f430345986"), + SkinEncoder.encode("613731d224be1fd184ff759a5e17a896c3c26d35057c6d9989f07ae7ffe47120"), + SkinEncoder.encode("a14b08078bf97e82bb7056b7a4f820626a42fe72395cbbf33a0eea72af0e7a12"), + SkinEncoder.encode("9c40bf70f1648b7ee438a6a22904228ab5fbbd4926af30ae8ade4df01b8d7413"), + }; + + public DiceTaterBlock(Settings settings) { + super(settings, ParticleTypes.POOF, TEXTURES[6]); + + this.setDefaultState(this.stateManager.getDefaultState().with(FACE, 1)); + } + + private boolean isRolling(BlockState state) { + return state.get(FACE) == ROLLING_FACE; + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + if (hand == Hand.OFF_HAND || this.isRolling(state)) { + return ActionResult.FAIL; + } + + if (world instanceof ServerWorld) { + world.setBlockState(pos, state.with(FACE, ROLLING_FACE)); + world.scheduleBlockTick(pos, this, ROLLING_TICKS); + + float pitch = 1.6f + world.getRandom().nextFloat() * 0.4f; + world.playSound(null, pos, SoundEvents.UI_CARTOGRAPHY_TABLE_TAKE_RESULT, SoundCategory.BLOCKS, 1, pitch); + } + + return ActionResult.SUCCESS; + } + + @Override + public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + if (this.isRolling(state)) { + int face = world.getRandom().nextInt(MAX_FACE) + 1; + world.setBlockState(pos, state.with(FACE, face)); + } + } + + @Override + public boolean hasComparatorOutput(BlockState state) { + return true; + } + + @Override + public int getComparatorOutput(BlockState state, World world, BlockPos pos) { + int face = state.get(FACE); + return MathHelper.floor(face / 6f * 15f); + } + + @Override + protected void appendProperties(Builder builder) { + super.appendProperties(builder); + builder.add(FACE); + } + + @Override + public String getPolymerSkinValue(BlockState state, BlockPos pos, ServerPlayerEntity player) { + int face = state.get(FACE); + return TEXTURES[face]; + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/ElderGuardianParticleTater.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/ElderGuardianParticleTater.java similarity index 69% rename from src/main/java/xyz/nucleoid/extras/lobby/block/ElderGuardianParticleTater.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/ElderGuardianParticleTater.java index bf916f4c..863a6c10 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/ElderGuardianParticleTater.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/ElderGuardianParticleTater.java @@ -1,8 +1,8 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.particle.ParticleTypes; -public class ElderGuardianParticleTater extends TinyPotatoBlock { +public class ElderGuardianParticleTater extends CubicPotatoBlock { public ElderGuardianParticleTater(Settings settings, String texture) { super(settings, ParticleTypes.ELDER_GUARDIAN, texture, 10000); } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/LuckyTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/LuckyTaterBlock.java similarity index 94% rename from src/main/java/xyz/nucleoid/extras/lobby/block/LuckyTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/LuckyTaterBlock.java index af84efca..d1295f9b 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/LuckyTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/LuckyTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.SharedConstants; import net.minecraft.block.Block; @@ -28,8 +28,9 @@ import net.minecraft.util.math.random.Random; import net.minecraft.world.World; import xyz.nucleoid.extras.NucleoidExtras; +import xyz.nucleoid.extras.util.SkinEncoder; -public class LuckyTaterBlock extends TinyPotatoBlock { +public class LuckyTaterBlock extends CubicPotatoBlock { private static final BooleanProperty COOLDOWN = BooleanProperty.of("cooldown"); private static final int COOLDOWN_TICKS = SharedConstants.TICKS_PER_MINUTE * 30; @@ -40,7 +41,7 @@ public class LuckyTaterBlock extends TinyPotatoBlock { public LuckyTaterBlock(Settings settings, String texture, String cooldownTexture) { super(settings, (ParticleEffect) null, texture); - this.cooldownTexture = cooldownTexture; + this.cooldownTexture = SkinEncoder.encode(cooldownTexture); this.setDefaultState(this.stateManager.getDefaultState().with(COOLDOWN, false)); } @@ -62,7 +63,7 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt if (world instanceof ServerWorld serverWorld) { Block drop = this.getDrop(serverWorld); - if (drop instanceof TinyPotatoBlock taterDrop) { + if (drop instanceof CubicPotatoBlock taterDrop) { BlockPos dropPos = this.getDropPos(serverWorld, state, pos); if (dropPos != null) { BlockState dropState = drop.getDefaultState(); @@ -121,7 +122,7 @@ private BlockPos getDropPos(ServerWorld world, BlockState state, BlockPos pos) { for (int i = 0; i < 3; i++) { BlockState dropState = world.getBlockState(dropPos); - if (dropState.getBlock() instanceof TinyPotatoBlock) { + if (dropState.getBlock() instanceof CubicPotatoBlock) { return null; } else if (dropState.isAir()) { return dropPos; diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/LuckyTaterDrop.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/LuckyTaterDrop.java similarity index 58% rename from src/main/java/xyz/nucleoid/extras/lobby/block/LuckyTaterDrop.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/LuckyTaterDrop.java index 1fd462c1..230a68b5 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/LuckyTaterDrop.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/LuckyTaterDrop.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; public interface LuckyTaterDrop { public int getWeight(); diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/RedstoneTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/RedstoneTaterBlock.java similarity index 84% rename from src/main/java/xyz/nucleoid/extras/lobby/block/RedstoneTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/RedstoneTaterBlock.java index 04c29acc..c9db4335 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/RedstoneTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/RedstoneTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.block.BlockState; import net.minecraft.particle.ParticleEffect; @@ -6,7 +6,7 @@ import net.minecraft.util.math.Direction; import net.minecraft.world.BlockView; -public class RedstoneTaterBlock extends TinyPotatoBlock { +public class RedstoneTaterBlock extends CubicPotatoBlock { public RedstoneTaterBlock(Settings settings, ParticleEffect particleEffect, String texture) { super(settings, particleEffect, texture); } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/TargetTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TargetTaterBlock.java similarity index 97% rename from src/main/java/xyz/nucleoid/extras/lobby/block/TargetTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/TargetTaterBlock.java index b3f2c832..83d63c86 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/TargetTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TargetTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.advancement.criterion.Criteria; import net.minecraft.block.Block; @@ -23,7 +23,7 @@ import net.minecraft.world.World; import net.minecraft.world.WorldAccess; -public class TargetTaterBlock extends TinyPotatoBlock { +public class TargetTaterBlock extends CubicPotatoBlock { private static final IntProperty POWER = Properties.POWER; private static final int RECOVERABLE_POWER_DELAY = 20; private static final int REGULAR_POWER_DELAY = 8; diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/TateroidBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TateroidBlock.java similarity index 69% rename from src/main/java/xyz/nucleoid/extras/lobby/block/TateroidBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/TateroidBlock.java index a963637f..825c1b0b 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/TateroidBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TateroidBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.SharedConstants; import net.minecraft.block.Block; @@ -8,8 +8,11 @@ import net.minecraft.block.entity.BlockEntityTicker; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.sound.SoundEvent; import net.minecraft.state.StateManager.Builder; import net.minecraft.state.property.BooleanProperty; @@ -18,20 +21,24 @@ import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import xyz.nucleoid.extras.lobby.NEBlocks; import xyz.nucleoid.extras.mixin.BlockWithEntityAccessor; -public class TateroidBlock extends TinyPotatoBlock implements BlockEntityProvider { +public class TateroidBlock extends CubicPotatoBlock implements BlockEntityProvider { private static final BooleanProperty POWERED = Properties.POWERED; private static final int FULL_DURATION = 15 * SharedConstants.TICKS_PER_SECOND; private final RegistryEntry defaultSound; + private final double particleColor; - public TateroidBlock(Settings settings, RegistryEntry defaultSound, String texture) { + public TateroidBlock(Settings settings, RegistryEntry defaultSound, double particleColor, String texture) { super(settings, ParticleTypes.NOTE, texture); + this.defaultSound = defaultSound; + this.particleColor = particleColor; this.setDefaultState(this.stateManager.getDefaultState().with(POWERED, false)); } @@ -56,6 +63,38 @@ private int getDurationFromPower(int power) { return (int) (FULL_DURATION * (power / (float) Properties.LEVEL_15_MAX)); } + @Override + public void spawnBlockParticles(ServerWorld world, BlockPos pos, ParticleEffect particleEffect) { + if (particleEffect != null && world.getRandom().nextInt(getBlockParticleChance()) == 0) { + world.getBlockEntity(pos, NEBlocks.TATEROID_ENTITY).ifPresent(blockEntity -> { + world.spawnParticles(particleEffect, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 1, 0, 0, blockEntity.getParticleSpeed()); + }); + } + } + + @Override + public void spawnPlayerParticles(ServerPlayerEntity player) { + if (this.particleColor == -1) { + super.spawnPlayerParticles(player); + return; + } + + Box box = player.getBoundingBox(); + + double deltaX = box.getXLength() / 2d; + double deltaY = box.getYLength() / 2d; + double deltaZ = box.getZLength() / 2d; + + double x = player.getX() + (player.getRandom().nextGaussian() * deltaX); + double y = player.getY() + (player.getRandom().nextGaussian() * deltaY); + double z = player.getZ() + (player.getRandom().nextGaussian() * deltaZ); + + ParticleEffect particleEffect = this.getPlayerParticleEffect(player); + if (particleEffect != null) { + player.getWorld().spawnParticles(particleEffect, x, y, z, 0, 1, 0, 0, this.particleColor); + } + } + @Override public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { ActionResult result = super.onUse(state, world, pos, player, hand, hit); diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/TateroidBlockEntity.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TateroidBlockEntity.java similarity index 95% rename from src/main/java/xyz/nucleoid/extras/lobby/block/TateroidBlockEntity.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/TateroidBlockEntity.java index 6bf167bf..db31be45 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/TateroidBlockEntity.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TateroidBlockEntity.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import net.minecraft.SharedConstants; import net.minecraft.block.Block; @@ -48,6 +48,10 @@ public void setDuration(int duration) { this.setDuration(duration, true); } + public double getParticleSpeed() { + return this.pitch / 24d; + } + private RegistryEntry getSound() { if (this.sound != null) { return this.sound; @@ -83,7 +87,7 @@ public void playSound(long time) { this.world.playSound(null, x, y, z, sound, SoundCategory.RECORDS, 3, this.pitch / 24f, this.world.random.nextLong()); if (this.world instanceof ServerWorld serverWorld) { - serverWorld.spawnParticles(ParticleTypes.NOTE, x, y, z, 0, 1, 0, 0, (double) this.pitch / 24d); + serverWorld.spawnParticles(ParticleTypes.NOTE, x, y, z, 0, 1, 0, 0, this.getParticleSpeed()); } } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/TinyPotatoBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TinyPotatoBlock.java similarity index 58% rename from src/main/java/xyz/nucleoid/extras/lobby/block/TinyPotatoBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/TinyPotatoBlock.java index db992b64..6cd2e099 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/TinyPotatoBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/TinyPotatoBlock.java @@ -1,16 +1,10 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; -import eu.pb4.polymer.core.api.block.PolymerHeadBlock; +import eu.pb4.polymer.core.api.block.PolymerBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemStack; -import net.minecraft.particle.BlockStateParticleEffect; -import net.minecraft.particle.ItemStackParticleEffect; import net.minecraft.particle.ParticleEffect; -import net.minecraft.particle.ParticleTypes; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.state.StateManager; @@ -20,49 +14,27 @@ import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; -import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +import xyz.nucleoid.extras.util.SkinEncoder; import java.util.ArrayList; import java.util.List; -public class TinyPotatoBlock extends Block implements PolymerHeadBlock { - +public abstract class TinyPotatoBlock extends Block implements PolymerBlock { public static final List TATERS = new ArrayList<>(); - private final String texture; private final ParticleEffect particleEffect; private final int particleRate; + private final String texture; - public TinyPotatoBlock(Settings settings, ParticleEffect particleEffect, String texture, int particleRate) { + public TinyPotatoBlock(Settings settings, String texture, ParticleEffect particleEffect, int particleRate) { super(settings); this.particleEffect = particleEffect; - this.texture = texture; this.particleRate = particleRate; - + this.texture = SkinEncoder.encode(texture); TATERS.add(this); } - public TinyPotatoBlock(Settings settings, ParticleEffect particleEffect, String texture) { - this(settings, particleEffect, texture, 2); - } - - public TinyPotatoBlock(Settings settings, BlockState particleState, String texture) { - this(settings, new BlockStateParticleEffect(ParticleTypes.BLOCK, particleState), texture); - } - - public TinyPotatoBlock(Settings settings, Block particleBlock, String texture) { - this(settings, particleBlock.getDefaultState(), texture); - } - - public TinyPotatoBlock(Settings settings, ItemStack particleStack, String texture) { - this(settings, new ItemStackParticleEffect(ParticleTypes.ITEM, particleStack), texture); - } - - public TinyPotatoBlock(Settings settings, Item particleItem, String texture) { - this(settings, new ItemStack(particleItem), texture); - } - public ParticleEffect getParticleEffect(int time) { return this.particleEffect; } @@ -114,12 +86,10 @@ public boolean isFickle() { return false; } - @Override - protected void appendProperties(StateManager.Builder builder) { - super.appendProperties(builder); - builder.add(Properties.ROTATION); - } + public final String getItemTexture() { + return this.texture; + } @Override public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { @@ -134,23 +104,4 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt return ActionResult.SUCCESS; } - - @Override - public String getPolymerSkinValue(BlockState state, BlockPos pos, ServerPlayerEntity player) { - return this.texture; - } - - public BlockState getPlacementState(ItemPlacementContext ctx) { - return this.getDefaultState().with(Properties.ROTATION, MathHelper.floor((double)(ctx.getPlayerYaw() * 16.0F / 360.0F) + 0.5D) & 15); - } - - @Override - public Block getPolymerBlock(BlockState state) { - return PolymerHeadBlock.super.getPolymerBlock(); - } - - @Override - public BlockState getPolymerBlockState(BlockState state) { - return PolymerHeadBlock.super.getPolymerBlockState(state).with(Properties.ROTATION, state.get(Properties.ROTATION)); - } } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/block/WardenTaterBlock.java b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/WardenTaterBlock.java similarity index 90% rename from src/main/java/xyz/nucleoid/extras/lobby/block/WardenTaterBlock.java rename to src/main/java/xyz/nucleoid/extras/lobby/block/tater/WardenTaterBlock.java index 30cc8be8..26ae5ede 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/block/WardenTaterBlock.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/block/tater/WardenTaterBlock.java @@ -1,4 +1,4 @@ -package xyz.nucleoid.extras.lobby.block; +package xyz.nucleoid.extras.lobby.block.tater; import it.unimi.dsi.fastutil.longs.LongArrayList; import it.unimi.dsi.fastutil.longs.LongList; @@ -18,7 +18,7 @@ import net.minecraft.world.event.EntityPositionSource; import net.minecraft.world.event.PositionSource; -public class WardenTaterBlock extends TinyPotatoBlock { +public class WardenTaterBlock extends CubicPotatoBlock { private static final int BOX_SIZE = 16; private static final int ARRIVAL_TICKS = SharedConstants.TICKS_PER_SECOND; @@ -33,7 +33,7 @@ public ParticleEffect getBlockParticleEffect(BlockState state, ServerWorld world @Override public ParticleEffect getPlayerParticleEffect(ServerPlayerEntity player) { - BlockPos pos = new BlockPos(player.getX(), player.getEyeY(), player.getZ()); + BlockPos pos = BlockPos.ofFloored(player.getX(), player.getEyeY(), player.getZ()); return getTaterVibrationParticleEffect(pos, new EntityPositionSource(player, 0), player.getWorld()); } @@ -69,6 +69,6 @@ private static boolean isVibrationTater(BlockState state) { } Block block = state.getBlock(); - return block instanceof TinyPotatoBlock && !(block instanceof WardenTaterBlock); + return block instanceof CubicPotatoBlock && !(block instanceof WardenTaterBlock); } } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/contributor/Contributor.java b/src/main/java/xyz/nucleoid/extras/lobby/contributor/Contributor.java new file mode 100644 index 00000000..5dbbdafe --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/contributor/Contributor.java @@ -0,0 +1,102 @@ +package xyz.nucleoid.extras.lobby.contributor; + +import java.util.Optional; +import java.util.function.Consumer; + +import com.mojang.authlib.GameProfile; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import net.minecraft.block.entity.SkullBlockEntity; +import net.minecraft.client.texture.PlayerSkinProvider; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtHelper; +import net.minecraft.server.MinecraftServer; +import net.minecraft.text.Text; +import net.minecraft.util.Util; +import xyz.nucleoid.extras.mixin.lobby.ArmorStandEntityAccessor; + +public record Contributor(String name, ContributorSocials socials, Optional statueNbt) implements Comparable { + protected static final Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + Codec.STRING.fieldOf("name").forGetter(Contributor::name), + ContributorSocials.CODEC.fieldOf("socials").forGetter(Contributor::socials), + NbtCompound.CODEC.optionalFieldOf("statue_nbt").forGetter(Contributor::statueNbt) + ).apply(instance, Contributor::new) + ); + + public Text getName() { + return Text.literal(this.name); + } + + public ItemStack createPlayerHead(GameProfile profile) { + var playerHead = new ItemStack(Items.PLAYER_HEAD); + writeSkullOwner(playerHead, profile); + + return playerHead; + } + + public void fillEntity(MinecraftServer server, Entity entity) { + if (this.statueNbt.isPresent()) { + entity.readNbt(this.statueNbt.get()); + } + + // Name + entity.setCustomName(this.getName()); + entity.setCustomNameVisible(true); + + // Equipment + var profile = this.createGameProfile(server); + var playerHead = this.createPlayerHead(profile); + + entity.equipStack(EquipmentSlot.HEAD, playerHead); + + this.loadGameProfileProperties(server, profile, fullProfile -> { + writeSkullOwner(playerHead, fullProfile); + }); + + if (entity instanceof ArmorStandEntity) { + var accessor = (ArmorStandEntityAccessor) (Object) entity; + accessor.callSetHideBasePlate(true); + accessor.callSetShowArms(true); + } + } + + public GameProfile createGameProfile(MinecraftServer server) { + var uuid = this.socials.minecraft(); + + return server.getUserCache().getByUuid(uuid).orElseGet(() -> { + return new GameProfile(uuid, null); + }); + } + + public void loadGameProfileProperties(MinecraftServer server, GameProfile profile, Consumer callback) { + if (profile.isComplete() && profile.getProperties().containsKey(PlayerSkinProvider.TEXTURES)) { + return; + } + + Util.getMainWorkerExecutor().execute(() -> { + GameProfile fullProfile = server.getSessionService().fillProfileProperties(profile, false); + + server.getUserCache().add(fullProfile); + server.execute(() -> { + callback.accept(profile); + }); + }); + } + + @Override + public int compareTo(Contributor o) { + return this.name.compareToIgnoreCase(o.name); + } + + public static void writeSkullOwner(ItemStack stack, GameProfile profile) { + var nbt = stack.getOrCreateNbt(); + nbt.put(SkullBlockEntity.SKULL_OWNER_KEY, NbtHelper.writeGameProfile(new NbtCompound(), profile)); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/contributor/ContributorData.java b/src/main/java/xyz/nucleoid/extras/lobby/contributor/ContributorData.java new file mode 100644 index 00000000..1ee896d5 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/contributor/ContributorData.java @@ -0,0 +1,132 @@ +package xyz.nucleoid.extras.lobby.contributor; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +import javax.net.ssl.HttpsURLConnection; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.google.gson.JsonElement; +import com.mojang.serialization.JsonOps; + +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.JsonHelper; +import xyz.nucleoid.extras.NucleoidExtrasConfig; +import xyz.nucleoid.extras.lobby.block.ContributorStatueBlockEntity; +import xyz.nucleoid.extras.mixin.lobby.ThreadedAnvilChunkStorageAccessor; + +public final class ContributorData { + private static final Logger LOGGER = LogManager.getLogger(ContributorData.class); + + private static final Executor EXECUTOR = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() + .setNameFormat("contributor-data-fetcher") + .setDaemon(true) + .build() + ); + + private static final String PEOPLE_KEY = "people"; + + private static final Map CONTRIBUTORS = new HashMap<>(); + + // Methods for accessing data + + public static Collection> getContributors() { + return CONTRIBUTORS.entrySet(); + } + + public static Contributor getContributor(String id) { + return CONTRIBUTORS.get(id); + } + + // Methods for reloading data + + private static void addContributor(Entry entry) { + var result = Contributor.CODEC.decode(JsonOps.INSTANCE, entry.getValue()); + + result.error().ifPresent(error -> { + LOGGER.warn("Failed to parse contributor '{}': {}", entry.getKey(), error.message()); + }); + + result.result().ifPresent(pair -> { + CONTRIBUTORS.put(entry.getKey(), pair.getFirst()); + }); + } + + private static void refreshData() { + CONTRIBUTORS.clear(); + + try { + var config = NucleoidExtrasConfig.get(); + if (config.contributorDataUrl() == null) return; + + var url = config.contributorDataUrl(); + var connection = (HttpsURLConnection) url.openConnection(); + + connection.setDoOutput(true); + connection.setRequestMethod("GET"); + connection.setRequestProperty("Content-Type", "application/json"); + + try (var reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)) { + var json = JsonHelper.deserialize(reader); + var people = json.getAsJsonObject(PEOPLE_KEY); + + for (var entry : people.entrySet()) { + addContributor(entry); + } + } + } catch (IOException e) { + LOGGER.error("Failed to fetch contributor data", e); + } + } + + private static void refreshHolograms(MinecraftServer server) { + for (var world : server.getWorlds()) { + var chunkManager = world.getChunkManager(); + + var chunkStorage = chunkManager.threadedAnvilChunkStorage; + var accessor = (ThreadedAnvilChunkStorageAccessor) (Object) chunkStorage; + + for (var holder : accessor.callEntryIterator()) { + var chunk = holder.getWorldChunk(); + + if (chunk != null) { + for (var entity : chunk.getBlockEntities().values()) { + if (entity instanceof ContributorStatueBlockEntity statue) { + statue.removeHolograms(); + statue.spawnHolograms(); + } + } + } + } + } + } + + private static void refreshAll(MinecraftServer server, boolean initial) { + EXECUTOR.execute(() -> { + refreshData(); + + if (!initial) { + server.execute(() -> { + refreshHolograms(server); + }); + } + }); + + } + + public static void register() { + ServerLifecycleEvents.SERVER_STARTING.register(server -> refreshAll(server, true)); + ServerLifecycleEvents.END_DATA_PACK_RELOAD.register((server, resourceManager, success) -> refreshAll(server, false)); + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/contributor/ContributorSocials.java b/src/main/java/xyz/nucleoid/extras/lobby/contributor/ContributorSocials.java new file mode 100644 index 00000000..62ed2d26 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/contributor/ContributorSocials.java @@ -0,0 +1,16 @@ +package xyz.nucleoid.extras.lobby.contributor; + +import java.util.UUID; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import net.minecraft.util.Uuids; + +public record ContributorSocials(UUID minecraft) { + protected static final Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + Uuids.CODEC.fieldOf("minecraft").forGetter(ContributorSocials::minecraft) + ).apply(instance, ContributorSocials::new) + ); +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/criterion/TaterCollectedCriterion.java b/src/main/java/xyz/nucleoid/extras/lobby/criterion/TaterCollectedCriterion.java index 952a78aa..6fcc9d64 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/criterion/TaterCollectedCriterion.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/criterion/TaterCollectedCriterion.java @@ -10,7 +10,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import xyz.nucleoid.extras.NucleoidExtras; -import xyz.nucleoid.extras.lobby.block.TinyPotatoBlock; +import xyz.nucleoid.extras.lobby.block.tater.CubicPotatoBlock; public class TaterCollectedCriterion extends AbstractCriterion { public static final Identifier ID = NucleoidExtras.identifier("tater_collected"); @@ -21,7 +21,7 @@ protected TaterCollectedCriterion.Conditions conditionsFromJson(JsonObject obj, if(tater != null && !Registries.BLOCK.containsId(tater)) { throw new JsonSyntaxException("No tater exists with ID "+tater+"!"); } - Integer count = obj.has("count") ? obj.get("count").getAsString().equals("all") ? TinyPotatoBlock.TATERS.size() : obj.get("count").getAsInt() : null; + Integer count = obj.has("count") ? obj.get("count").getAsString().equals("all") ? CubicPotatoBlock.TATERS.size() : obj.get("count").getAsInt() : null; return new Conditions(playerPredicate, tater, count); } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/entity/LeaderboardDisplayEntity.java b/src/main/java/xyz/nucleoid/extras/lobby/entity/LeaderboardDisplayEntity.java new file mode 100644 index 00000000..7bb4bd78 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/lobby/entity/LeaderboardDisplayEntity.java @@ -0,0 +1,126 @@ +package xyz.nucleoid.extras.lobby.entity; + +import eu.pb4.polymer.core.api.entity.PolymerEntity; +import eu.pb4.polymer.virtualentity.api.tracker.DisplayTrackedData; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.decoration.DisplayEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import net.minecraft.nbt.NbtList; +import net.minecraft.nbt.NbtString; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.Style; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; +import net.minecraft.world.World; +import xyz.nucleoid.extras.integrations.http.NucleoidHttpClient; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class LeaderboardDisplayEntity extends DisplayEntity.TextDisplayEntity implements PolymerEntity { + private static final Style PLACE_NUMBER = Style.EMPTY.withColor(Formatting.GRAY).withBold(true); + private static final Style PLACE_PLAYER = Style.EMPTY.withColor(Formatting.WHITE); + private static final Style PLACE_VALUE = Style.EMPTY.withColor(Formatting.BLUE); + + private static final int REGULAR_UPDATE_WAIT_TIME = 20 * 60; + private static final int FORCED_UPDATE_WAIT_TIME = 20 * 10; + private static final int CHANGE_DISPLAYED_TIME_TIME = 20 * 10; + private List leaderboardIds = List.of(new Identifier("nucleoid:games_played")); + private final List leaderboards = new ArrayList<>(); + private int updateTimer = -1; + private int displayTimer = CHANGE_DISPLAYED_TIME_TIME; + private int currentId = 0; + + public LeaderboardDisplayEntity(EntityType entityType, World world) { + super(entityType, world); + this.leaderboards.add(Text.empty()); + } + + @Override + public void readCustomDataFromNbt(NbtCompound nbt) { + super.readCustomDataFromNbt(nbt); + + var ids = nbt.getList("leaderboards", NbtElement.STRING_TYPE).stream().map(x -> Identifier.tryParse(x.asString())).filter(x -> x != null).toList(); + this.leaderboardIds = ids; + this.updateTimer = FORCED_UPDATE_WAIT_TIME; + this.leaderboards.clear(); + + for (var id : ids) { + this.leaderboards.add(Text.literal("Waiting for update... [" + id + "]")); + } + + if (this.leaderboards.isEmpty()) { + this.leaderboards.add(Text.literal("EMPTY!!!")); + } + } + + @Override + public void tick() { + super.tick(); + if (this.updateTimer-- == 0) { + int i = 0; + var list = new ArrayList>(this.leaderboardIds.size()); + for (var id : this.leaderboardIds) { + var ia = i++; + list.add(NucleoidHttpClient.getLeaderboard(id).thenApplyAsync(data -> { + var text = Text.empty(); + + for (var entry : data) { + text.append(Text.literal(entry.ranking() + ". ").setStyle(PLACE_NUMBER)); + String name; + + var profile = this.getServer().getUserCache().getByUuid(entry.playerUuid()); + if (profile.isPresent()) { + name = profile.get().getName(); + } else { + name = "[Unknown player]"; + } + + text.append(Text.literal(name).setStyle(PLACE_PLAYER)); + text.append(Text.literal("(").append("" + entry.value()).append(")").setStyle(PLACE_VALUE)); + text.append("\n"); + } + + return text; + }).thenAcceptAsync(text -> this.leaderboards.set(ia, text), this.getServer())); + } + + CompletableFuture.allOf(list.toArray(new CompletableFuture[0])).handleAsync((a, b) -> { + this.updateTimer = REGULAR_UPDATE_WAIT_TIME; + return null; + }, this.getServer()); + } + + if (this.displayTimer-- == 0) { + this.displayTimer = CHANGE_DISPLAYED_TIME_TIME; + this.currentId++; + if (this.currentId >= this.leaderboards.size()) { + this.currentId = 0; + } + + this.dataTracker.set(DisplayTrackedData.Text.TEXT, this.leaderboards.get(this.currentId)); + } + } + + + + @Override + public void writeCustomDataToNbt(NbtCompound nbt) { + super.writeCustomDataToNbt(nbt); + if (this.leaderboardIds != null) { + var list = new NbtList(); + this.leaderboardIds.stream().map(x -> NbtString.of(x.toString())).forEach(list::add); + + nbt.put("leaderboards", list); + } + } + + @Override + public EntityType getPolymerEntityType(ServerPlayerEntity player) { + return EntityType.TEXT_DISPLAY; + } +} diff --git a/src/main/java/xyz/nucleoid/extras/lobby/entity/QuickArmorStandEntity.java b/src/main/java/xyz/nucleoid/extras/lobby/entity/QuickArmorStandEntity.java index 8648e9d1..47fb1996 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/entity/QuickArmorStandEntity.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/entity/QuickArmorStandEntity.java @@ -14,7 +14,7 @@ public QuickArmorStandEntity(EntityType entityType, } public QuickArmorStandEntity(World world) { - super(NEEntities.QUICK_ARMOR_STAND_ENTITY_TYPE, world); + super(NEEntities.QUICK_ARMOR_STAND, world); } @Override diff --git a/src/main/java/xyz/nucleoid/extras/lobby/gui/TaterBoxGui.java b/src/main/java/xyz/nucleoid/extras/lobby/gui/TaterBoxGui.java index 2a4aadbf..b755aae6 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/gui/TaterBoxGui.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/gui/TaterBoxGui.java @@ -22,7 +22,7 @@ public class TaterBoxGui extends PagedGui.FromList { protected boolean hideUnfound = true; public TaterBoxGui(ScreenHandlerType type, ServerPlayerEntity player, boolean includePlayerInventorySlots, List guiElementInterfaces) { - super(type, player, includePlayerInventorySlots, guiElementInterfaces); + super(type, player, includePlayerInventorySlots, guiElementInterfaces, null); } public static TaterBoxGui of(ServerPlayerEntity player, List elements) { diff --git a/src/main/java/xyz/nucleoid/extras/lobby/item/LobbyHeadItem.java b/src/main/java/xyz/nucleoid/extras/lobby/item/LobbyHeadItem.java index 286c4ea9..43943572 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/item/LobbyHeadItem.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/item/LobbyHeadItem.java @@ -2,26 +2,50 @@ import eu.pb4.polymer.core.api.block.PolymerHeadBlock; import eu.pb4.polymer.core.api.item.PolymerHeadBlockItem; +import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.core.api.utils.PolymerUtils; import net.minecraft.block.Block; import net.minecraft.client.item.TooltipContext; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.screen.ScreenTexts; +import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import java.util.List; -public class LobbyHeadItem extends PolymerHeadBlockItem { +public class LobbyHeadItem extends BlockItem implements PolymerItem { + private final String texture; + @SuppressWarnings("unchecked") - public LobbyHeadItem(PolymerHeadBlock block, Settings settings) { - super((T) block, settings); + public LobbyHeadItem(Block block, Settings settings, String texture) { + super(block, settings); + this.texture = texture; + } + + @Override + public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { + return Items.PLAYER_HEAD; + } + + public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipContext tooltipContext, ServerPlayerEntity player) { + ItemStack out = PolymerItem.super.getPolymerItemStack(itemStack, tooltipContext, player); + if (this.texture != null) { + out.getOrCreateNbt().put("SkullOwner", PolymerUtils.createSkullOwner(this.texture)); + } + return out; } @Override public Text getName() { - return Text.empty().append(super.getName()).append(" ").append(Text.translatable("text.nucleoid_extras.lobby_only")); + return Text.empty().append(super.getName()).append(ScreenTexts.SPACE).append(Text.translatable("text.nucleoid_extras.lobby_only")); } @Override diff --git a/src/main/java/xyz/nucleoid/extras/lobby/item/QuickArmorStandItem.java b/src/main/java/xyz/nucleoid/extras/lobby/item/QuickArmorStandItem.java index 86f90ace..50f5da49 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/item/QuickArmorStandItem.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/item/QuickArmorStandItem.java @@ -54,10 +54,10 @@ public ActionResult useOnBlock(ItemUsageContext context) { BlockPos blockPos = itemPlacementContext.getBlockPos(); ItemStack itemStack = context.getStack(); Vec3d vec3d = Vec3d.ofBottomCenter(blockPos); - Box box = NEEntities.QUICK_ARMOR_STAND_ENTITY_TYPE.getDimensions().getBoxAt(vec3d.getX(), vec3d.getY(), vec3d.getZ()); + Box box = NEEntities.QUICK_ARMOR_STAND.getDimensions().getBoxAt(vec3d.getX(), vec3d.getY(), vec3d.getZ()); if (world.isSpaceEmpty(box) && world.getOtherEntities(null, box).isEmpty()) { if (world instanceof ServerWorld serverWorld) { - var armorStandEntity = NEEntities.QUICK_ARMOR_STAND_ENTITY_TYPE.spawnFromItemStack(serverWorld, itemStack, context.getPlayer(), blockPos, SpawnReason.SPAWN_EGG, true, true); + var armorStandEntity = NEEntities.QUICK_ARMOR_STAND.spawnFromItemStack(serverWorld, itemStack, context.getPlayer(), blockPos, SpawnReason.SPAWN_EGG, true, true); if (armorStandEntity == null) { return ActionResult.FAIL; } diff --git a/src/main/java/xyz/nucleoid/extras/lobby/item/TaterBoxItem.java b/src/main/java/xyz/nucleoid/extras/lobby/item/TaterBoxItem.java index b640c7cd..0d2fabaa 100644 --- a/src/main/java/xyz/nucleoid/extras/lobby/item/TaterBoxItem.java +++ b/src/main/java/xyz/nucleoid/extras/lobby/item/TaterBoxItem.java @@ -1,7 +1,7 @@ package xyz.nucleoid.extras.lobby.item; -import eu.pb4.polymer.core.api.block.PolymerHeadBlock; import eu.pb4.polymer.core.api.item.PolymerItem; +import eu.pb4.polymer.core.api.utils.PolymerUtils; import eu.pb4.sgui.api.elements.GuiElementInterface; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -18,7 +18,6 @@ import net.minecraft.registry.Registries; import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.tag.TagKey; -import net.minecraft.resource.featuretoggle.FeatureSet; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -33,7 +32,9 @@ import xyz.nucleoid.extras.NucleoidExtras; import xyz.nucleoid.extras.lobby.NECriteria; import xyz.nucleoid.extras.lobby.NEItems; -import xyz.nucleoid.extras.lobby.block.TinyPotatoBlock; +import xyz.nucleoid.extras.lobby.PlayerLobbyState; +import xyz.nucleoid.extras.lobby.block.tater.CubicPotatoBlock; +import xyz.nucleoid.extras.lobby.block.tater.TinyPotatoBlock; import xyz.nucleoid.extras.lobby.gui.TaterBoxGui; import xyz.nucleoid.extras.mixin.lobby.ArmorStandEntityAccessor; @@ -41,10 +42,10 @@ public class TaterBoxItem extends ArmorItem implements PolymerItem { private static final Text NOT_OWNER_MESSAGE = Text.translatable("text.nucleoid_extras.tater_box.not_owner").formatted(Formatting.RED); - private static final Text NONE_TEXT = Text.translatable("text.nucleoid_extras.tater_box.none"); + public static final Text NONE_TEXT = Text.translatable("text.nucleoid_extras.tater_box.none"); private static final String OWNER_KEY = "Owner"; - private static final String TATERS_KEY = "Taters"; + private static final String LEGACY_TATERS_KEY = "Taters"; private static final String SELECTED_TATER_KEY = "SelectedTater"; private static final int COLOR = 0xCEADAA; @@ -52,7 +53,7 @@ public class TaterBoxItem extends ArmorItem implements PolymerItem { private static final TagKey VIRAL_TATERS = TagKey.of(RegistryKeys.BLOCK, VIRAL_TATERS_ID); public TaterBoxItem(Settings settings) { - super(ArmorMaterials.LEATHER, EquipmentSlot.HEAD, settings); + super(ArmorMaterials.LEATHER, ArmorItem.Type.HELMET, settings); } private ActionResult isOwner(ItemStack stack, PlayerEntity player) { @@ -66,46 +67,9 @@ private ActionResult isOwner(ItemStack stack, PlayerEntity player) { return player.getUuid().equals(uuid) ? ActionResult.SUCCESS : ActionResult.FAIL; } - public int getTaterCount(ItemStack stack) { - NbtCompound tag = stack.getNbt(); - if (tag == null) return 0; - if (!tag.contains(TATERS_KEY, NbtElement.LIST_TYPE)) return 0; - - int count = 0; - NbtList taters = tag.getList(TATERS_KEY, NbtElement.STRING_TYPE); - for (int index = 0; index < taters.size(); index++) { - Identifier blockId = Identifier.tryParse(taters.getString(index)); - if (blockId != null) { - count++; - } - } - - return count; - } - - private Set getBlockIds(ItemStack stack) { - NbtCompound tag = stack.getNbt(); - if (tag == null || !tag.contains(TATERS_KEY, NbtElement.LIST_TYPE)) return Set.of(); - - Set blockIds = new HashSet<>(); - NbtList taters = tag.getList(TATERS_KEY, NbtElement.STRING_TYPE); - for (int index = 0; index < taters.size(); index++) { - Identifier blockId = Identifier.tryParse(taters.getString(index)); - if (blockId != null) { - blockIds.add(blockId); - } - } - - return blockIds; - } - - private static Iterator getAllTaterIds() { - return TinyPotatoBlock.TATERS.stream().map(Registries.BLOCK::getId).sorted().iterator(); - } - - private MutableText getTitle(ItemStack stack) { - Text name = this.getName(stack); - int count = this.getTaterCount(stack); + private MutableText getTitle(ServerPlayerEntity player) { + Text name = this.getName(); + int count = PlayerLobbyState.get(player).collectedTaters.size(); int max = TinyPotatoBlock.TATERS.size(); return Text.translatable("text.nucleoid_extras.tater_box.title", name, count, max); @@ -117,26 +81,38 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han TypedActionResult result = TypedActionResult.success(stack, world.isClient()); if (!world.isClient()) { + if (stack.hasNbt() && stack.getNbt().contains(LEGACY_TATERS_KEY)) { + var data = PlayerLobbyState.get(user); + + for (var nbt : stack.getNbt().getList(LEGACY_TATERS_KEY, NbtElement.STRING_TYPE)) { + var block = Registries.BLOCK.get(Identifier.tryParse(nbt.asString())); + + if (block instanceof TinyPotatoBlock tinyPotatoBlock) { + data.collectedTaters.add(tinyPotatoBlock); + } + } + stack.getNbt().remove(LEGACY_TATERS_KEY); + user.sendMessage(Text.translatable("text.nucleoid_extras.tater_box.updated")); + } + BlockHitResult hit = Item.raycast(world, user, RaycastContext.FluidHandling.NONE); if (hit.getType() == HitResult.Type.BLOCK) { result = new TypedActionResult<>(this.tryAdd(world, hit.getBlockPos(), stack, user), stack); } else { + var state = PlayerLobbyState.get(user); List taters = new ArrayList<>(); taters.add(createGuiElement(stack, user, hand, Items.BARRIER, NONE_TEXT, null, true)); - Iterator iterator = getAllTaterIds(); - while (iterator.hasNext()) { - Identifier taterId = iterator.next(); - boolean found = TaterBoxItem.containsTater(stack, taterId); - Block tater = Registries.BLOCK.get(taterId); + for (var tater : TinyPotatoBlock.TATERS) { + boolean found = state.collectedTaters.contains(tater); - taters.add(createGuiElement(stack, user, hand, tater, tater.getName(), taterId, found)); + taters.add(createGuiElement(stack, user, hand, tater, tater.getName(), Registries.BLOCK.getId(tater), found)); } var ui = TaterBoxGui.of((ServerPlayerEntity) user, taters); ui.setHideUnfound(true); - ui.setTitle(this.getTitle(stack)); + ui.setTitle(this.getTitle((ServerPlayerEntity) user)); ui.open(); } } @@ -144,9 +120,9 @@ public TypedActionResult use(World world, PlayerEntity user, Hand han return result; } - private TaterBoxGui.TaterGuiElement createGuiElement(ItemStack stack, PlayerEntity user, Hand hand, ItemConvertible icon, Text name, Identifier taterId, boolean found) { + private TaterBoxGui.TaterGuiElement createGuiElement(ItemStack stack, PlayerEntity user, Hand hand, ItemConvertible icon, Text text, Identifier taterId, boolean found) { var guiElementBuilder = new TaterBoxGui.TaterGuiElementBuilder(icon.asItem()); - guiElementBuilder.setName(name); + guiElementBuilder.setName(text); guiElementBuilder.setFound(found); guiElementBuilder.hideFlags(); guiElementBuilder.setCallback((index, type, action, gui) -> { @@ -208,45 +184,31 @@ private ActionResult tryAdd(ItemStack slotStack, ItemStack stack, PlayerEntity p } private ActionResult tryAdd(Block block, ItemStack stack, PlayerEntity player) { - if (!(block instanceof TinyPotatoBlock)) return ActionResult.PASS; + if (!(block instanceof TinyPotatoBlock tater)) return ActionResult.PASS; + stack.getOrCreateNbt().putUuid(OWNER_KEY, player.getUuid()); - Identifier taterId = Registries.BLOCK.getId(block); + var state = PlayerLobbyState.get(player); - ActionResult owner = this.isOwner(stack, player); - if (owner == ActionResult.FAIL) { - player.sendMessage(NOT_OWNER_MESSAGE, true); - return ActionResult.FAIL; - } - - NbtCompound tag = stack.getOrCreateNbt(); - if (owner == ActionResult.PASS) { - tag.putUuid(OWNER_KEY, player.getUuid()); - } - - - boolean alreadyAdded = TaterBoxItem.containsTater(stack, taterId); + boolean alreadyAdded = state.collectedTaters.contains(tater); Text message; if (alreadyAdded) { message = Text.translatable("text.nucleoid_extras.tater_box.already_added", block.getName()).formatted(Formatting.RED); } else { - NbtList taters = tag.getList(TATERS_KEY, NbtElement.STRING_TYPE); - - taters.add(NbtString.of(taterId.toString())); - tag.put(TATERS_KEY, taters); + state.collectedTaters.add(tater); message = Text.translatable("text.nucleoid_extras.tater_box.added", block.getName()); } player.sendMessage(message, true); - TaterBoxItem.triggerCriterion((ServerPlayerEntity) player, taterId, getTaterCount(stack)); + TaterBoxItem.triggerCriterion((ServerPlayerEntity) player, Registries.BLOCK.getId(tater), state.collectedTaters.size()); return alreadyAdded ? ActionResult.FAIL : ActionResult.SUCCESS; } @Override public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) { - if (TaterBoxItem.getSelectedTater(itemStack) instanceof PolymerHeadBlock) { + if (TaterBoxItem.getSelectedTater(itemStack) != null) { return Items.PLAYER_HEAD; } else { return Items.LEATHER_HELMET; @@ -258,8 +220,8 @@ public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipContext context ItemStack out = PolymerItem.super.getPolymerItemStack(itemStack, context, player); Block selectedTater = TaterBoxItem.getSelectedTater(itemStack); - if (selectedTater instanceof PolymerHeadBlock polymerHeadBlock && player != null) { - NbtCompound skullOwner = polymerHeadBlock.getPolymerHeadSkullOwner(selectedTater.getDefaultState(), player.getBlockPos(), player); + if (selectedTater instanceof TinyPotatoBlock potatoBlock) { + NbtCompound skullOwner = PolymerUtils.createSkullOwner(potatoBlock.getItemTexture()); out.getOrCreateNbt().put(SkullItem.SKULL_OWNER_KEY, skullOwner); } else { out.getOrCreateSubNbt(DyeableItem.DISPLAY_KEY).putInt(DyeableItem.COLOR_KEY, COLOR); @@ -273,6 +235,8 @@ public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipContext context public void appendTooltip(ItemStack stack, World world, List tooltip, TooltipContext context) { super.appendTooltip(stack, world, tooltip, context); + var owner = getOwnerPlayer(stack, world); + Block selectedBlock = getSelectedTater(stack); Text selectedName; @@ -284,13 +248,23 @@ public void appendTooltip(ItemStack stack, World world, List tooltip, Tool tooltip.add(Text.translatable("text.nucleoid_extras.tater_box.selected", selectedName).formatted(Formatting.GRAY)); - int count = this.getTaterCount(stack); - int max = TinyPotatoBlock.TATERS.size(); + int count = owner != null ? PlayerLobbyState.get(owner).collectedTaters.size() : 0; + int max = CubicPotatoBlock.TATERS.size(); String percent = String.format("%.2f", count / (double) max * 100); tooltip.add(Text.translatable("text.nucleoid_extras.tater_box.completion", count, max, percent).formatted(Formatting.GRAY)); } + private PlayerEntity getOwnerPlayer(ItemStack stack, World world) { + if (!stack.hasNbt() || !stack.getNbt().contains(OWNER_KEY)) { + return null; + } + + var owner = stack.getNbt().getUuid(OWNER_KEY); + + return world.getPlayerByUuid(owner); + } + @Nullable public static Identifier getSelectedTaterId(ItemStack stack) { NbtCompound tag = stack.getNbt(); @@ -324,31 +298,17 @@ public static void triggerCriterion(ServerPlayerEntity player, Identifier taterI NECriteria.TATER_COLLECTED.trigger(player, taterId, count); } - public static boolean containsTater(ItemStack stack, Identifier taterId) { - NbtCompound tag = stack.getOrCreateNbt(); - NbtList taters = tag.getList(TATERS_KEY, NbtElement.STRING_TYPE); - for (int index = 0; index < taters.size(); index++) { - String string = taters.getString(index); - if (taterId.toString().equals(string)) { - return true; - } - } - return false; - } - - public static boolean containsTater(ItemStack stack, Block tater) { - return containsTater(stack, Registries.BLOCK.getId(tater)); - } - public static void addToItemGroup(ItemGroup.Entries entries) { ItemStack fullStack = new ItemStack(NEItems.TATER_BOX); NbtCompound nbt = fullStack.getOrCreateNbt(); - NbtList taters = nbt.getList(TATERS_KEY, NbtElement.STRING_TYPE); + NbtList taters = nbt.getList(LEGACY_TATERS_KEY, NbtElement.STRING_TYPE); TinyPotatoBlock.TATERS.forEach((tater) -> taters.add(NbtString.of(Registries.BLOCK.getId(tater).toString()))); - nbt.put(TATERS_KEY, taters); + nbt.put(LEGACY_TATERS_KEY, taters); + + fullStack.setCustomName(Text.literal("Unlocked Tater Box")); entries.add(fullStack); } diff --git a/src/main/java/xyz/nucleoid/extras/mixin/lobby/ArmorStandEntityAccessor.java b/src/main/java/xyz/nucleoid/extras/mixin/lobby/ArmorStandEntityAccessor.java index 00f8a520..2a90b83a 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/lobby/ArmorStandEntityAccessor.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/lobby/ArmorStandEntityAccessor.java @@ -11,4 +11,10 @@ public interface ArmorStandEntityAccessor { @Invoker("getSlotFromPosition") EquipmentSlot callSlotFromPosition(Vec3d hitPos); + + @Invoker("setHideBasePlate") + void callSetHideBasePlate(boolean hideBasePlate); + + @Invoker("setShowArms") + void callSetShowArms(boolean showArms); } diff --git a/src/main/java/xyz/nucleoid/extras/mixin/lobby/LivingEntityAccessor.java b/src/main/java/xyz/nucleoid/extras/mixin/lobby/LivingEntityAccessor.java new file mode 100644 index 00000000..197c05fa --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/mixin/lobby/LivingEntityAccessor.java @@ -0,0 +1,22 @@ +package xyz.nucleoid.extras.mixin.lobby; + +import java.util.Map; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; + +@Mixin(LivingEntity.class) +public interface LivingEntityAccessor { + @Invoker("getEquipmentChanges") + Map callGetEquipmentChanges(); + + @Invoker("setSyncedHandStack") + void callSetSyncedHandStack(EquipmentSlot slot, ItemStack stack); + + @Invoker("setSyncedArmorStack") + void callSetSyncedArmorStack(EquipmentSlot slot, ItemStack stack); +} diff --git a/src/main/java/xyz/nucleoid/extras/mixin/lobby/ServerPlayerEntityMixin.java b/src/main/java/xyz/nucleoid/extras/mixin/lobby/ServerPlayerEntityMixin.java index f65340de..0e316edb 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/lobby/ServerPlayerEntityMixin.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/lobby/ServerPlayerEntityMixin.java @@ -12,7 +12,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import xyz.nucleoid.extras.lobby.NECriteria; -import xyz.nucleoid.extras.lobby.block.TinyPotatoBlock; +import xyz.nucleoid.extras.lobby.PlayerLobbyState; +import xyz.nucleoid.extras.lobby.block.tater.CubicPotatoBlock; import xyz.nucleoid.extras.lobby.item.TaterBoxItem; @Mixin(ServerPlayerEntity.class) @@ -24,11 +25,11 @@ public ServerPlayerEntityMixin(World world, BlockPos pos, float yaw, GameProfile @Inject(method = "playerTick", at = @At("TAIL")) private void extras$playerTick(CallbackInfo ci) { ItemStack helmet = this.getEquippedStack(EquipmentSlot.HEAD); - if (helmet.getItem() instanceof TaterBoxItem taterBox) { - if (TaterBoxItem.getSelectedTater(helmet) instanceof TinyPotatoBlock tinyPotatoBlock) { + if (helmet.getItem() instanceof TaterBoxItem) { + if (TaterBoxItem.getSelectedTater(helmet) instanceof CubicPotatoBlock tinyPotatoBlock) { ServerPlayerEntity player = (ServerPlayerEntity) (Object) this; NECriteria.WEAR_TATER.trigger(player, TaterBoxItem.getSelectedTaterId(helmet)); - NECriteria.TATER_COLLECTED.trigger(player, TaterBoxItem.getSelectedTaterId(helmet), taterBox.getTaterCount(helmet)); + NECriteria.TATER_COLLECTED.trigger(player, TaterBoxItem.getSelectedTaterId(helmet), PlayerLobbyState.get(this).collectedTaters.size()); if (this.age % tinyPotatoBlock.getPlayerParticleRate(player) == 0) { tinyPotatoBlock.spawnPlayerParticles(player); } diff --git a/src/main/java/xyz/nucleoid/extras/mixin/lobby/ThreadedAnvilChunkStorageAccessor.java b/src/main/java/xyz/nucleoid/extras/mixin/lobby/ThreadedAnvilChunkStorageAccessor.java new file mode 100644 index 00000000..a1633039 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/mixin/lobby/ThreadedAnvilChunkStorageAccessor.java @@ -0,0 +1,13 @@ +package xyz.nucleoid.extras.mixin.lobby; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +import net.minecraft.server.world.ChunkHolder; +import net.minecraft.server.world.ThreadedAnvilChunkStorage; + +@Mixin(ThreadedAnvilChunkStorage.class) +public interface ThreadedAnvilChunkStorageAccessor { + @Invoker("entryIterator") + Iterable callEntryIterator(); +} diff --git a/src/main/java/xyz/nucleoid/extras/mixin/patches/EntityMixin.java b/src/main/java/xyz/nucleoid/extras/mixin/patches/EntityMixin.java index 54b451b3..3e821ba0 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/patches/EntityMixin.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/patches/EntityMixin.java @@ -2,6 +2,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.registry.tag.DamageTypeTags; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -18,7 +19,7 @@ public class EntityMixin { */ @Inject(method = "isInvulnerableTo", at = @At("HEAD"), cancellable = true) private void extras$makeExceptionForExplosions(DamageSource damageSource, CallbackInfoReturnable cir) { - if (this.invulnerable && damageSource.isExplosive()) { + if (this.invulnerable && damageSource.isIn(DamageTypeTags.IS_EXPLOSION)) { cir.setReturnValue(true); } } diff --git a/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerInteractionManagerMixin.java b/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerInteractionManagerMixin.java index 8dcd5096..02f428fc 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerInteractionManagerMixin.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerInteractionManagerMixin.java @@ -1,6 +1,6 @@ package xyz.nucleoid.extras.mixin.player_list; -import net.minecraft.network.Packet; +import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ServerPlayerInteractionManager; @@ -15,7 +15,7 @@ public abstract class PlayerInteractionManagerMixin { method = "changeGameMode", at = @At( value = "INVOKE", - target = "Lnet/minecraft/server/PlayerManager;sendToAll(Lnet/minecraft/network/Packet;)V" + target = "Lnet/minecraft/server/PlayerManager;sendToAll(Lnet/minecraft/network/packet/Packet;)V" ) ) private void extras$overrideGameModeListUpdate(PlayerManager playerManager, Packet whitePacket) { diff --git a/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerManagerMixin.java b/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerManagerMixin.java index 5db1b1f8..ea978fd9 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerManagerMixin.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/player_list/PlayerManagerMixin.java @@ -2,7 +2,7 @@ import eu.pb4.polymer.core.mixin.entity.PlayerListS2CPacketAccessor; import net.minecraft.network.ClientConnection; -import net.minecraft.network.Packet; +import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; import net.minecraft.server.PlayerManager; import net.minecraft.server.network.ServerPlayerEntity; @@ -20,7 +20,7 @@ public abstract class PlayerManagerMixin { @Shadow @Final private Map playerMap; - @Redirect(method = "onPlayerConnect", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;sendToAll(Lnet/minecraft/network/Packet;)V")) + @Redirect(method = "onPlayerConnect", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;sendToAll(Lnet/minecraft/network/packet/Packet;)V")) private void extras$sendToOthersOnJoin(PlayerManager playerManager, Packet whitePacket) { var entry = ((PlayerListS2CPacket) whitePacket).getEntries().get(0); var player = playerManager.getPlayer(entry.profileId()); diff --git a/src/main/java/xyz/nucleoid/extras/mixin/player_list/ServerWorldMixin.java b/src/main/java/xyz/nucleoid/extras/mixin/player_list/ServerWorldMixin.java index 8515c430..f2257221 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/player_list/ServerWorldMixin.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/player_list/ServerWorldMixin.java @@ -1,6 +1,7 @@ package xyz.nucleoid.extras.mixin.player_list; import net.minecraft.entity.Entity; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.server.network.ServerPlayerEntity; @@ -19,8 +20,8 @@ @Mixin(ServerWorld.class) public abstract class ServerWorldMixin extends World { - protected ServerWorldMixin(MutableWorldProperties properties, RegistryKey registryRef, RegistryEntry dimension, Supplier profiler, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { - super(properties, registryRef, dimension, profiler, isClient, debugWorld, seed, maxChainedNeighborUpdates); + protected ServerWorldMixin(MutableWorldProperties properties, RegistryKey registryRef, DynamicRegistryManager registryManager, RegistryEntry dimension, Supplier profiler, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { + super(properties, registryRef, registryManager, dimension, profiler, isClient, debugWorld, seed, maxChainedNeighborUpdates); } @Inject(method = "addPlayer", at = @At("RETURN")) diff --git a/src/main/java/xyz/nucleoid/extras/mixin/sidebar/ServerWorldMixin.java b/src/main/java/xyz/nucleoid/extras/mixin/sidebar/ServerWorldMixin.java index b1ad085a..c06452f2 100644 --- a/src/main/java/xyz/nucleoid/extras/mixin/sidebar/ServerWorldMixin.java +++ b/src/main/java/xyz/nucleoid/extras/mixin/sidebar/ServerWorldMixin.java @@ -1,6 +1,7 @@ package xyz.nucleoid.extras.mixin.sidebar; import net.minecraft.entity.Entity; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.server.network.ServerPlayerEntity; @@ -19,8 +20,8 @@ @Mixin(ServerWorld.class) public abstract class ServerWorldMixin extends World { - protected ServerWorldMixin(MutableWorldProperties properties, RegistryKey registryRef, RegistryEntry dimension, Supplier profiler, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { - super(properties, registryRef, dimension, profiler, isClient, debugWorld, seed, maxChainedNeighborUpdates); + protected ServerWorldMixin(MutableWorldProperties properties, RegistryKey registryRef, DynamicRegistryManager registryManager, RegistryEntry dimension, Supplier profiler, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { + super(properties, registryRef, registryManager, dimension, profiler, isClient, debugWorld, seed, maxChainedNeighborUpdates); } @Inject(method = "addPlayer", at = @At("RETURN")) diff --git a/src/main/java/xyz/nucleoid/extras/placeholder/GameTextContent.java b/src/main/java/xyz/nucleoid/extras/placeholder/GameTextContent.java index 6a7455a1..56e98cc4 100644 --- a/src/main/java/xyz/nucleoid/extras/placeholder/GameTextContent.java +++ b/src/main/java/xyz/nucleoid/extras/placeholder/GameTextContent.java @@ -1,5 +1,6 @@ package xyz.nucleoid.extras.placeholder; +import net.minecraft.screen.ScreenTexts; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.*; import org.jetbrains.annotations.Nullable; @@ -29,7 +30,7 @@ public Text toVanilla(@Nullable ServerPlayerEntity player, Text text) { TextColor.fromRgb(gameSpace == null ? 0x800080 : (int) (gameSpace.getMetadata().id().getLeastSignificantBits() & 0xFFFFFF))) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, gameSpace == null ? Text.literal("Lobby") : gameSpace.getMetadata().sourceConfig().name()))) - ).append(" "); + ).append(ScreenTexts.SPACE); out.getSiblings().addAll(text.getSiblings()); diff --git a/src/main/java/xyz/nucleoid/extras/player_list/PlayerListHelper.java b/src/main/java/xyz/nucleoid/extras/player_list/PlayerListHelper.java index 3ceb6d97..b5acabb6 100644 --- a/src/main/java/xyz/nucleoid/extras/player_list/PlayerListHelper.java +++ b/src/main/java/xyz/nucleoid/extras/player_list/PlayerListHelper.java @@ -6,7 +6,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.Util; +import net.minecraft.util.Nullables; import net.minecraft.world.GameMode; import org.jetbrains.annotations.Nullable; import xyz.nucleoid.plasmid.game.manager.GameSpaceManager; @@ -22,7 +22,7 @@ public static Text getDisplayName(ServerPlayerEntity player, boolean gray) { @Nullable private static PublicPlayerSession.Serialized getSession(ServerPlayerEntity player) { - return Util.map(player.getSession(), PublicPlayerSession::toSerialized); + return Nullables.map(player.getSession(), PublicPlayerSession::toSerialized); } public static GameMode getGameMode(ServerPlayerEntity player, boolean gray) { diff --git a/src/main/java/xyz/nucleoid/extras/util/CommonGuiElements.java b/src/main/java/xyz/nucleoid/extras/util/CommonGuiElements.java index 6ca4ca51..47d07580 100644 --- a/src/main/java/xyz/nucleoid/extras/util/CommonGuiElements.java +++ b/src/main/java/xyz/nucleoid/extras/util/CommonGuiElements.java @@ -1,11 +1,15 @@ package xyz.nucleoid.extras.util; +import eu.pb4.sgui.api.elements.GuiElement; import eu.pb4.sgui.api.elements.GuiElementBuilder; import net.minecraft.item.Items; +import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class CommonGuiElements { + private static final GuiElement PURPLE_PLATE = new GuiElementBuilder(Items.PURPLE_STAINED_GLASS_PANE).setName(Text.empty()).build(); + private static final GuiElement WHITE_PLATE = new GuiElementBuilder(Items.WHITE_STAINED_GLASS_PANE).setName(Text.empty()).build(); public static GuiElementBuilder nextPage() { return new GuiElementBuilder(Items.PLAYER_HEAD) .setName(Text.translatable("spectatorMenu.next_page").formatted(Formatting.WHITE)) @@ -19,4 +23,19 @@ public static GuiElementBuilder previousPage() { .hideFlags() .setSkullOwner("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzEwODI5OGZmMmIyNjk1MWQ2ODNlNWFkZTQ2YTQyZTkwYzJmN2M3ZGQ0MWJhYTkwOGJjNTg1MmY4YzMyZTU4MyJ9fX0"); } + + public static GuiElementBuilder back(Runnable runnable) { + return new GuiElementBuilder(Items.STRUCTURE_VOID).setName(ScreenTexts.BACK).setCallback((a, b, c, gui) -> { + PagedGui.playClickSound(gui.getPlayer()); + runnable.run(); + }); + } + + public static GuiElement purple() { + return PURPLE_PLATE; + } + + public static GuiElement white() { + return WHITE_PLATE; + } } diff --git a/src/main/java/xyz/nucleoid/extras/util/ExtraCodecs.java b/src/main/java/xyz/nucleoid/extras/util/ExtraCodecs.java new file mode 100644 index 00000000..852ca057 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/util/ExtraCodecs.java @@ -0,0 +1,11 @@ +package xyz.nucleoid.extras.util; + +import com.mojang.serialization.Codec; + +import java.net.URI; +import java.util.UUID; + +public class ExtraCodecs { + public static final Codec STRING_UUID = Codec.STRING.xmap(UUID::fromString, UUID::toString); + public static final Codec URI = Codec.STRING.xmap(java.net.URI::create, x -> x.toString()); +} diff --git a/src/main/java/xyz/nucleoid/extras/util/GameVersionResolver.java b/src/main/java/xyz/nucleoid/extras/util/GameVersionResolver.java index 51d8ece7..861ccb28 100644 --- a/src/main/java/xyz/nucleoid/extras/util/GameVersionResolver.java +++ b/src/main/java/xyz/nucleoid/extras/util/GameVersionResolver.java @@ -2,8 +2,8 @@ import org.jetbrains.annotations.Nullable; -import com.viaversion.viaversion.api.Via; -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +//import com.viaversion.viaversion.api.Via; +//import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.SharedConstants; @@ -32,15 +32,15 @@ public static String getVersion() { @Nullable private static String getViaVersionHighestSupportedVersion() { try { - int maxVersion = (int) Via.getAPI().getSupportedVersions().last(); - ProtocolVersion protocolVersion = ProtocolVersion.getProtocol(maxVersion); + //int maxVersion = (int) Via.getAPI().getSupportedVersions().last(); + //ProtocolVersion protocolVersion = ProtocolVersion.getProtocol(maxVersion); - return protocolVersion.getName(); + //return protocolVersion.getName(); } catch (Throwable e) { // The ViaVersion API does not provide a way // to test whether the platform is loaded, // so the exception must be caught instead. - return null; } + return null; } } diff --git a/src/main/java/xyz/nucleoid/extras/util/PagedGui.java b/src/main/java/xyz/nucleoid/extras/util/PagedGui.java index 1d22b126..fc7b1512 100644 --- a/src/main/java/xyz/nucleoid/extras/util/PagedGui.java +++ b/src/main/java/xyz/nucleoid/extras/util/PagedGui.java @@ -19,6 +19,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.function.IntFunction; public abstract class PagedGui extends SimpleGui { private static final Object2IntMap> TYPE_TO_SIZE = new Object2IntOpenHashMap<>(); @@ -26,7 +27,10 @@ public abstract class PagedGui extends SimpleGui { protected int page = 0; public static SimpleGui of(ServerPlayerEntity player, List elements) { - return new FromList(ScreenHandlerType.GENERIC_9X6, player, false, elements); + return of(player, elements, null); + } + public static SimpleGui of(ServerPlayerEntity player, List elements, @Nullable IntFunction navbar) { + return new FromList(ScreenHandlerType.GENERIC_9X6, player, false, elements, navbar); } public PagedGui(ScreenHandlerType type, ServerPlayerEntity player, boolean includePlayerInventorySlots) { @@ -140,7 +144,7 @@ public static DisplayElement nextPage(PagedGui gui) { new GuiElementBuilder(Items.PLAYER_HEAD) .setName(Text.translatable("spectatorMenu.next_page").formatted(Formatting.DARK_GRAY)) .hideFlags() - .setSkullOwner("ewogICJ0aW1lc3RhbXAiIDogMTY0MDYxNjExMDQ4OCwKICAicHJvZmlsZUlkIiA6ICIxZjEyNTNhYTVkYTQ0ZjU5YWU1YWI1NmFhZjRlNTYxNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJOb3RNaUt5IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdlNTc3MjBhNDg3OGM4YmNhYjBlOWM5YzQ3ZDllNTUxMjhjY2Q3N2JhMzQ0NWE1NGE5MWUzZTFlMWEyNzM1NmUiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==") + .setSkullOwner(SkinEncoder.encode("7e57720a4878c8bcab0e9c9c47d9e55128ccd77ba3445a54a91e3e1e1a27356e")) ); } } @@ -159,7 +163,7 @@ public static DisplayElement previousPage(PagedGui gui) { new GuiElementBuilder(Items.PLAYER_HEAD) .setName(Text.translatable("spectatorMenu.previous_page").formatted(Formatting.DARK_GRAY)) .hideFlags() - .setSkullOwner("ewogICJ0aW1lc3RhbXAiIDogMTY0MDYxNjE5MjE0MiwKICAicHJvZmlsZUlkIiA6ICJmMjc0YzRkNjI1MDQ0ZTQxOGVmYmYwNmM3NWIyMDIxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJIeXBpZ3NlbCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81MDgyMGY3NmUzZTA0MWM3NWY3NmQwZjMwMTIzMmJkZjQ4MzIxYjUzNGZlNmE4NTljY2I4NzNkMjk4MWE5NjIzIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=") + .setSkullOwner(SkinEncoder.encode("50820f76e3e041c75f76d0f301232bdf48321b534fe6a859ccb873d2981a9623")) ); } } @@ -180,13 +184,22 @@ public static void playClickSound(ServerPlayerEntity player) { public static class FromList extends PagedGui { protected final List list; + @Nullable + private final IntFunction navbar; - public FromList(ScreenHandlerType type, ServerPlayerEntity player, boolean includePlayerInventorySlots, List guiElementInterfaces) { + public FromList(ScreenHandlerType type, ServerPlayerEntity player, boolean includePlayerInventorySlots, List guiElementInterfaces, IntFunction navbar) { super(type, player, includePlayerInventorySlots); this.list = guiElementInterfaces; + this.navbar = navbar; this.updateDisplay(); } + @Override + protected DisplayElement getNavElement(int id) { + var x = navbar != null ? navbar.apply(id) : null; + return x != null ? DisplayElement.of(x) : super.getNavElement(id); + } + protected List getList() { return list; } diff --git a/src/main/java/xyz/nucleoid/extras/util/SkinEncoder.java b/src/main/java/xyz/nucleoid/extras/util/SkinEncoder.java new file mode 100644 index 00000000..aea244d7 --- /dev/null +++ b/src/main/java/xyz/nucleoid/extras/util/SkinEncoder.java @@ -0,0 +1,29 @@ +package xyz.nucleoid.extras.util; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +public class SkinEncoder { + /** + * @param hash a hash part of the skin URL after http://textures.minecraft.net/texture/ + * @return Base64-encoded skin texture for player heads + */ + public static String encode(String hash) { + if (hash == null) return null; + if (hash.length() > 80) { + return hash; + } + + return encodeUrl("http://textures.minecraft.net/texture/" + hash); + } + + /** + * @return Base64-encoded skin texture for player heads + */ + public static String encodeUrl(String url) { + if (url == null) return null; + var value = """ + {"textures":{"SKIN":{"url":"%s"}}}""".formatted(url); + return new String(Base64.getEncoder().encode(value.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8); + } +} diff --git a/src/main/resources/data/nucleoid_extras/advancements/taters/axolotl_taters.json b/src/main/resources/data/nucleoid_extras/advancements/taters/axolotl_taters.json new file mode 100644 index 00000000..62ccf16a --- /dev/null +++ b/src/main/resources/data/nucleoid_extras/advancements/taters/axolotl_taters.json @@ -0,0 +1,50 @@ +{ + "parent": "nucleoid_extras:taters/copper_taters", + "display": { + "icon": { + "item": "nucleoid_extras:lucy_axolotl_tater" + }, + "title": { + "translate": "advancements.nucleoid_extras.axolotl_taters.title" + }, + "description": { + "translate": "advancements.nucleoid_extras.axolotl_taters.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "get_lucy_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:lucy_axolotl_tater" + } + }, + "get_wild_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:wild_axolotl_tater" + } + }, + "get_gold_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:gold_axolotl_tater" + } + }, + "get_cyan_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:cyan_axolotl_tater" + } + }, + "get_blue_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:blue_axolotl_tater" + } + } + } +} diff --git a/src/main/resources/data/nucleoid_extras/advancements/taters/caves_and_cliffs_taters.json b/src/main/resources/data/nucleoid_extras/advancements/taters/caves_and_cliffs_taters.json index 0672543c..0b19448d 100644 --- a/src/main/resources/data/nucleoid_extras/advancements/taters/caves_and_cliffs_taters.json +++ b/src/main/resources/data/nucleoid_extras/advancements/taters/caves_and_cliffs_taters.json @@ -1,5 +1,5 @@ { - "parent": "nucleoid_extras:taters/copper_taters", + "parent": "nucleoid_extras:taters/axolotl_taters", "display": { "icon": { "item": "nucleoid_extras:azalea_tater" @@ -117,6 +117,36 @@ "conditions": { "tater": "nucleoid_extras:raw_iron_tater" } + }, + "get_lucy_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:lucy_axolotl_tater" + } + }, + "get_wild_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:wild_axolotl_tater" + } + }, + "get_gold_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:gold_axolotl_tater" + } + }, + "get_cyan_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:cyan_axolotl_tater" + } + }, + "get_blue_axolotl_tater": { + "trigger": "nucleoid_extras:tater_collected", + "conditions": { + "tater": "nucleoid_extras:blue_axolotl_tater" + } } } -} \ No newline at end of file +} diff --git a/src/main/resources/data/nucleoid_extras/lang/en_us.json b/src/main/resources/data/nucleoid_extras/lang/en_us.json index 53143afc..b2255faf 100644 --- a/src/main/resources/data/nucleoid_extras/lang/en_us.json +++ b/src/main/resources/data/nucleoid_extras/lang/en_us.json @@ -26,6 +26,9 @@ "block.nucleoid_extras.end_gateway": "End Gateway (Lobby only!)", "block.nucleoid_extras.gold_launch_pad": "Gold Launch Pad (Lobby only!)", "block.nucleoid_extras.iron_launch_pad": "Iron Launch Pad (Lobby only!)", + "block.nucleoid_extras.contributor_statue": "Contributor Statue (Lobby only!)", + "block.nucleoid_extras.contributor_statue.contributor": "Contributor: %s", + "block.nucleoid_extras.contributor_statue.contributor_id": "Contributor ID: %s", "block.nucleoid_extras.infinite_dispenser": "Infinite Dispenser (Lobby only!)", "block.nucleoid_extras.infinite_dropper": "Infinite Dropper (Lobby only!)", "block.nucleoid_extras.snake_block": "Snake Block (Lobby only!)", @@ -48,6 +51,7 @@ "block.nucleoid_extras.white_concrete_powder": "Floating White Concrete Powder (Lobby only!)", "block.nucleoid_extras.yellow_concrete_powder": "Floating Yellow Concrete Powder (Lobby only!)", "block.nucleoid_extras.tiny_potato": "Tiny Potato", + "block.nucleoid_extras.botanical_potato": "Botanical Tiny Potato", "block.nucleoid_extras.irritater": "Irritater", "block.nucleoid_extras.sad_tater": "Sad Tater", "block.nucleoid_extras.flowering_azalea_tater": "Flowering Azalea Tater", @@ -85,6 +89,8 @@ "block.nucleoid_extras.blue_tateroid": "Blue Tateroid", "block.nucleoid_extras.purple_tateroid": "Purple Tateroid", "block.nucleoid_extras.flipped_tater": "Flipped Tater", + "block.nucleoid_extras.backward_tater": "Backward Tater", + "block.nucleoid_extras.upward_tater": "Upward Tater", "block.nucleoid_extras.santa_hat_tater": "Tiny Potato with Santa Hat", "block.nucleoid_extras.skeletater": "Skeletater", "block.nucleoid_extras.wither_skeletater": "Wither Skeletater", @@ -312,6 +318,11 @@ "block.nucleoid_extras.mud_tater": "Mud Tater", "block.nucleoid_extras.packed_mud_tater": "Packed Mud Tater", "block.nucleoid_extras.stripped_mangrove_log_tater": "Stripped Mangrove Log Tater", + "block.nucleoid_extras.lucy_axolotl_tater": "Leucistic Axolotl Tater", + "block.nucleoid_extras.wild_axolotl_tater": "Brown Axolotl Tater", + "block.nucleoid_extras.gold_axolotl_tater": "Gold Axolotl Tater", + "block.nucleoid_extras.cyan_axolotl_tater": "Cyan Axolotl Tater", + "block.nucleoid_extras.blue_axolotl_tater": "Blue Axolotl Tater", "block.nucleoid_extras.bronze_capsule_tater": "Bronze Capsule Tater", "block.nucleoid_extras.silver_capsule_tater": "Silver Capsule Tater", "block.nucleoid_extras.gold_capsule_tater": "Golden Capsule Tater", @@ -344,6 +355,9 @@ "text.nucleoid_extras.tater_box.not_found": "Not Found Yet!", "text.nucleoid_extras.tater_box.hide_unfound": "Hide Unfound", "text.nucleoid_extras.tater_box.show_unfound": "Show Unfound", + "text.nucleoid_extras.tater_box.updated": "Your Tater Box has been updated to new format! It will be safer than ever!", + + "text.nucleoid_extras.contributor_statue.title": "Select Contributor", "text.nucleoid_extras.lobby_items": "Do not use this block outside of lobby!", "text.nucleoid_extras.lobby_only": "(Lobby Only!)", @@ -351,6 +365,9 @@ "text.nucleoid_extras.statistics.web_url": "Click here to check out all the stats for this game!", "text.nucleoid_extras.statistics.bundle_header": "Statistics for %s", "text.nucleoid_extras.statistics.stat": "%s: %s", + "text.nucleoid_extras.statistics.list_ui": "Your statistics", + "text.nucleoid_extras.statistics.waiting": "Waiting for statistics data", + "text.nucleoid_extras.seconds": "%s second(s)", "advancements.nucleoid_extras.root.title": "Nucleoid", "advancements.nucleoid_extras.root.description": "Advancements for Nucleoid", @@ -399,6 +416,8 @@ "advancements.nucleoid_extras.raw_taters.description": "Collect all Raw Ore Taters in your Tater Box.", "advancements.nucleoid_extras.ice_taters.title": "Frozen Potatoes", "advancements.nucleoid_extras.ice_taters.description": "Collect all Ice Taters in your Tater Box.", + "advancements.nucleoid_extras.axolotl_taters.title": "A-xo-LOT of Taters", + "advancements.nucleoid_extras.axolotl_taters.description": "Collect all Axolotl Taters in your Tater Box.", "advancements.nucleoid_extras.pre_classic_taters.title": "Prehistoric Taters", "advancements.nucleoid_extras.pre_classic_taters.description": "Collect all Minecraft Pre-Classic Taters in your Tater Box.", diff --git a/src/main/resources/data/nucleoid_extras/lang/fr_fr.json b/src/main/resources/data/nucleoid_extras/lang/fr_fr.json index 7f1fa1d2..7121b9ca 100644 --- a/src/main/resources/data/nucleoid_extras/lang/fr_fr.json +++ b/src/main/resources/data/nucleoid_extras/lang/fr_fr.json @@ -1,38 +1,50 @@ -{ - "nucleoid.sidebar.welcome": "Bienvenue sur Nucleoid !", - "nucleoid.sidebar.games": "Jeux ouverts :", - "nucleoid.sidebar.game": "%s: %s", - "nucleoid.sidebar.game.player.1": "%s joueur", - "nucleoid.sidebar.game.player.more": "%s joueurs", - "nucleoid.sidebar.join": "...exécutez /game join", - "nucleoid.sidebar.compass": "ou utilisez la boussole !", - - "nucleoid.stop.scheduled": "Le redémarrage du serveur a été programmé ! Le serveur va redémarrer dans %s minutes, ou dès que tous les jeux seront terminés.", - "nucleoid.stop.scheduled.already": "Un redémarrage du serveur a déjà été programmé.", - "nucleoid.stop.game.open": "Impossible de rejoindre ce jeu : un redémarrage a été programmé !", - - "block.nucleoid_extras.light_block": "Bloc de lumière", - "block.nucleoid_extras.end_portal": "Portail de l'End", - "block.nucleoid_extras.end_gateway": "Passerelle de l'End", - "block.nucleoid_extras.gold_launch_pad": "Tremplin en or", - "block.nucleoid_extras.iron_launch_pad": "Tremplin en fer", - - "block.nucleoid_extras.black_concrete_powder": "Béton noir en poudre flotant", - "block.nucleoid_extras.blue_concrete_powder": "Béton bleu en poudre flotant", - "block.nucleoid_extras.brown_concrete_powder": "Béton marron en poudre flotant", - "block.nucleoid_extras.cyan_concrete_powder": "Béton cyan en poudre flotant", - "block.nucleoid_extras.green_concrete_powder": "Béton vert en poudre flotant", - "block.nucleoid_extras.gray_concrete_powder": "Béton gris en poudre flotant", - "block.nucleoid_extras.light_blue_concrete_powder": "Béton bleu clair en poudre flotant", - "block.nucleoid_extras.light_gray_concrete_powder": "Béton gris clair en poudre flotant", - "block.nucleoid_extras.lime_concrete_powder": "Béton vert clair en poudre flotant", - "block.nucleoid_extras.magenta_concrete_powder": "Béton magenta en poudre flotant", - "block.nucleoid_extras.orange_concrete_powder": "Béton orange en poudre flotant", - "block.nucleoid_extras.pink_concrete_powder": "Béton rose en poudre flotant", - "block.nucleoid_extras.purple_concrete_powder": "Béton violet en poudre flotant", - "block.nucleoid_extras.red_concrete_powder": "Béton rouge en poudre flotant", - "block.nucleoid_extras.white_concrete_powder": "Béton blanc en poudre flotant", - "block.nucleoid_extras.yellow_concrete_powder": "Béton jaune en poudre flotant", - - "text.nucleoid_extras.lobby_items": "Ne pas utiliser en dehors du lobby !" -} +{ + "nucleoid.sidebar.welcome": "Bienvenue sur Nucleoid !", + "nucleoid.sidebar.game.player.1": "%s joueur", + "nucleoid.sidebar.game.player.more": "%s joueurs", + "nucleoid.stop.scheduled": "Le redémarrage du serveur a été programmé ! Le serveur va redémarrer dans %s minutes, ou dès que tous les jeux seront terminés.", + "nucleoid.stop.scheduled.already": "Un redémarrage du serveur a déjà été programmé.", + "nucleoid.stop.game.open": "Impossible de rejoindre ce jeu : un redémarrage a été programmé !", + "block.nucleoid_extras.end_portal": "Portail de l'End (Lobby seulement !)", + "block.nucleoid_extras.end_gateway": "Passerelle de l'End (Lobby seulement !)", + "block.nucleoid_extras.gold_launch_pad": "Tremplin en or (Lobby seulement !)", + "block.nucleoid_extras.iron_launch_pad": "Tremplin en fer (Lobby seulement !)", + "block.nucleoid_extras.black_concrete_powder": "Béton noir en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.blue_concrete_powder": "Béton bleu en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.brown_concrete_powder": "Béton marron en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.cyan_concrete_powder": "Béton cyan en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.green_concrete_powder": "Béton vert en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.gray_concrete_powder": "Béton gris en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.light_blue_concrete_powder": "Béton bleu clair en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.light_gray_concrete_powder": "Béton gris clair en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.lime_concrete_powder": "Béton vert clair en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.magenta_concrete_powder": "Béton magenta en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.orange_concrete_powder": "Béton orange en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.pink_concrete_powder": "Béton rose en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.purple_concrete_powder": "Béton violet en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.red_concrete_powder": "Béton rouge en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.white_concrete_powder": "Béton blanc en poudre flottant (Lobby seulement !)", + "block.nucleoid_extras.yellow_concrete_powder": "Béton jaune en poudre flottant (Lobby seulement !)", + "text.nucleoid_extras.lobby_items": "Ne pas utiliser en dehors du lobby !", + "block.nucleoid_extras.snake_block": "Bloc Snake (Lobby seulement !)", + "block.nucleoid_extras.fast_snake_block": "Bloc Snake Rapide (Lobby seulement !)", + "block.nucleoid_extras.irritater": "Patatagacé", + "nucleoid.navigator.all_games": "Voir les jeux", + "nucleoid.navigator.open_games": "Voir ceux ouverts", + "nucleoid.sidebar.player_in_game.1": "%s joueur en ligne !", + "nucleoid.sidebar.join.1": "Rejoint avec %s...", + "nucleoid.sidebar.game.title": "Jeux ouverts :", + "nucleoid.sidebar.player_in_game.more": "%s joueurs en ligne !", + "nucleoid.sidebar.game.title.no_games": "Aucun jeux ouverts !", + "nucleoid.sidebar.game.entry": "%s : %s", + "nucleoid.sidebar.game.more": "...et %s autres !", + "block.nucleoid_extras.infinite_dropper": "Dropper Infini (Lobby seulement !)", + "nucleoid.sidebar.join.2": "...ou en utilisant la boussole !", + "block.nucleoid_extras.infinite_dispenser": "Distributeur Infini (Lobby seulement !)", + "block.nucleoid_extras.tiny_potato": "Pitite Patate", + "block.nucleoid_extras.contributor_statue": "Statue de contributeur (Lobby seulement !)", + "block.nucleoid_extras.contributor_statue.contributor": "Contributeur : %s", + "block.nucleoid_extras.contributor_statue.contributor_id": "ID du Contributeur : %s", + "block.nucleoid_extras.botanical_potato": "Pitite Patate Botanique", + "block.nucleoid_extras.sad_tater": "Pata-triste" +} diff --git a/src/main/resources/data/nucleoid_extras/lang/pt_br.json b/src/main/resources/data/nucleoid_extras/lang/pt_br.json index b8a500b6..313d2fe4 100644 --- a/src/main/resources/data/nucleoid_extras/lang/pt_br.json +++ b/src/main/resources/data/nucleoid_extras/lang/pt_br.json @@ -1,54 +1,49 @@ { - "nucleoid.sidebar.welcome": "Bem vindo, %s!", - "nucleoid.sidebar.player_in_game.1": "%s jogador online!", - "nucleoid.sidebar.player_in_game.more": "%s jogadores online!", - - "nucleoid.sidebar.game.title": "Jogos abertos:", - "nucleoid.sidebar.game.title.no_games": "Nenhum jogos abertos!", - "nucleoid.sidebar.game.entry": "%s: %s", - "nucleoid.sidebar.game.more": "...e %s mais!", - "nucleoid.sidebar.game.player.1": "%s jogador", - "nucleoid.sidebar.game.player.more": "%s jogadores", - - "nucleoid.sidebar.join.1": "Entre com %s...", - "nucleoid.sidebar.join.2": "...ou usando a bussola!", - "nucleoid.discord": "nucleoid.xyz/discord", - "nucleoid.stop.scheduled": "Reiniciamento do servidor foi programado! O servidor irá reiniciar em %s minutos, ou quando todos os jogos terminarem.", - "nucleoid.stop.scheduled.already": "Reiniciamento do servidor já foi programado.", - "nucleoid.stop.game.open": "Não é possivel entrar neste jogo: foi programado o reiniciamento do servidor!", - - "block.nucleoid_extras.end_portal": "Portal do End (Somente no lobby!)", - "block.nucleoid_extras.end_gateway": "Passagem do end (Somente no lobby!)", - "block.nucleoid_extras.gold_launch_pad": "Plataforma de Lançamento de Ouro (Somente no lobby!)", - "block.nucleoid_extras.iron_launch_pad": "Plataforma de Lançamento de Ferro (Somente no lobby!)", - - "block.nucleoid_extras.black_concrete_powder": "Pó de cimento preto flutuante (Somente no lobby!)", - "block.nucleoid_extras.blue_concrete_powder": "Pó de cimento azul flutuante (Somente no lobby!)", - "block.nucleoid_extras.brown_concrete_powder": "Pó de cimento marrom flutuante (Somente no lobby!)", - "block.nucleoid_extras.cyan_concrete_powder": "Pó de cimento ciano flutuante (Somente no lobby!)", - "block.nucleoid_extras.green_concrete_powder": "Pó de cimento verde flutuante (Somente no lobby!)", - "block.nucleoid_extras.gray_concrete_powder": "Pó de cimento cinza flutuante (Somente no lobby!)", - "block.nucleoid_extras.light_blue_concrete_powder": "Pó de cimento azul claro flutuante (Somente no lobby!)", - "block.nucleoid_extras.light_gray_concrete_powder": "Pó de cimento cinza claro flutuante (Somente no lobby!)", - "block.nucleoid_extras.lime_concrete_powder": "Pó de cimento verde-limão flutuante (Somente no lobby!)", - "block.nucleoid_extras.magenta_concrete_powder": "Pó de cimento magenta flutuante (Somente no lobby!)", - "block.nucleoid_extras.orange_concrete_powder": "Pó de cimento laranja flutuante (Somente no lobby!)", - "block.nucleoid_extras.pink_concrete_powder": "Pó de cimento rosa flutuante (Somente no lobby!)", - "block.nucleoid_extras.purple_concrete_powder": "Pó de cimento roxo flutuante (Somente no lobby!)", - "block.nucleoid_extras.red_concrete_powder": "Pó de cimento vermelho flutuante (Somente no lobby!)", - "block.nucleoid_extras.white_concrete_powder": "Pó de cimento branco flutuante (Somente no lobby!)", - "block.nucleoid_extras.yellow_concrete_powder": "Pó de cimento amarelo flutuante (Somente no lobby!)", - "block.nucleoid_extras.tiny_potato": "Tiny Potato (Somente no lobby!)", - "block.nucleoid_extras.irritater": "Irritater (Somente no lobby!)", - "block.nucleoid_extras.azalea_tater": "Azaleia Tater (Somente no lobby!)", - "block.nucleoid_extras.tateroid": "Tateroid (Somente no lobby!)", - "block.nucleoid_extras.safe_tnt": "TNT Segura (Somente no lobby!)", - - "item.nucleoid_extras.quick_armor_stand": "Suporte de Armaduras rapido (Somente no lobby!)", - - "text.nucleoid_extras.lobby_items": "Não use esse bloco fora do lobby!", - - "text.nucleoid_extras.statistics.web_url": "Clique aqui para ver todas estatisticas deste jogo!", - "text.nucleoid_extras.statistics.bundle_header": "Estatisticas para %s", - "text.nucleoid_extras.statistics.stat": "%s: %s" -} \ No newline at end of file + "nucleoid.sidebar.welcome": "Bem vindo, %s!", + "nucleoid.sidebar.player_in_game.1": "%s jogador online!", + "nucleoid.sidebar.player_in_game.more": "%s jogadores online!", + "nucleoid.sidebar.game.title": "Jogos abertos:", + "nucleoid.sidebar.game.title.no_games": "Nenhum jogos abertos!", + "nucleoid.sidebar.game.entry": "%s: %s", + "nucleoid.sidebar.game.more": "...e %s mais!", + "nucleoid.sidebar.game.player.1": "%s jogador", + "nucleoid.sidebar.game.player.more": "%s jogadores", + "nucleoid.sidebar.join.1": "Entre com %s...", + "nucleoid.sidebar.join.2": "...ou usando a bussola!", + "nucleoid.discord": "nucleoid.xyz/discord", + "nucleoid.stop.scheduled": "Reiniciamento do servidor foi programado! O servidor irá reiniciar em %s minutos, ou quando todos os jogos terminarem.", + "nucleoid.stop.scheduled.already": "Reiniciamento do servidor já foi programado.", + "nucleoid.stop.game.open": "Não é possivel entrar neste jogo: foi programado o reiniciamento do servidor!", + "block.nucleoid_extras.end_portal": "Portal do End (Somente no lobby!)", + "block.nucleoid_extras.end_gateway": "Passagem do end (Somente no lobby!)", + "block.nucleoid_extras.gold_launch_pad": "Plataforma de Lançamento de Ouro (Somente no lobby!)", + "block.nucleoid_extras.iron_launch_pad": "Plataforma de Lançamento de Ferro (Somente no lobby!)", + "block.nucleoid_extras.black_concrete_powder": "Pó de cimento preto flutuante (Somente no lobby!)", + "block.nucleoid_extras.blue_concrete_powder": "Pó de cimento azul flutuante (Somente no lobby!)", + "block.nucleoid_extras.brown_concrete_powder": "Pó de cimento marrom flutuante (Somente no lobby!)", + "block.nucleoid_extras.cyan_concrete_powder": "Pó de cimento ciano flutuante (Somente no lobby!)", + "block.nucleoid_extras.green_concrete_powder": "Pó de cimento verde flutuante (Somente no lobby!)", + "block.nucleoid_extras.gray_concrete_powder": "Pó de cimento cinza flutuante (Somente no lobby!)", + "block.nucleoid_extras.light_blue_concrete_powder": "Pó de cimento azul claro flutuante (Somente no lobby!)", + "block.nucleoid_extras.light_gray_concrete_powder": "Pó de cimento cinza claro flutuante (Somente no lobby!)", + "block.nucleoid_extras.lime_concrete_powder": "Pó de cimento verde-limão flutuante (Somente no lobby!)", + "block.nucleoid_extras.magenta_concrete_powder": "Pó de cimento magenta flutuante (Somente no lobby!)", + "block.nucleoid_extras.orange_concrete_powder": "Pó de cimento laranja flutuante (Somente no lobby!)", + "block.nucleoid_extras.pink_concrete_powder": "Pó de cimento rosa flutuante (Somente no lobby!)", + "block.nucleoid_extras.purple_concrete_powder": "Pó de cimento roxo flutuante (Somente no lobby!)", + "block.nucleoid_extras.red_concrete_powder": "Pó de cimento vermelho flutuante (Somente no lobby!)", + "block.nucleoid_extras.white_concrete_powder": "Pó de cimento branco flutuante (Somente no lobby!)", + "block.nucleoid_extras.yellow_concrete_powder": "Pó de cimento amarelo flutuante (Somente no lobby!)", + "block.nucleoid_extras.tiny_potato": "Tiny Potato (Somente no lobby!)", + "block.nucleoid_extras.irritater": "Irritater (Somente no lobby!)", + "block.nucleoid_extras.azalea_tater": "Azaleia Tater (Somente no lobby!)", + "block.nucleoid_extras.tateroid": "Tateroid (Somente no lobby!)", + "block.nucleoid_extras.safe_tnt": "TNT Segura (Somente no lobby!)", + "item.nucleoid_extras.quick_armor_stand": "Suporte de Armaduras rapido (Somente no lobby!)", + "text.nucleoid_extras.lobby_items": "Não use esse bloco fora do lobby!", + "text.nucleoid_extras.statistics.web_url": "Clique aqui para ver todas estatisticas deste jogo!", + "text.nucleoid_extras.statistics.bundle_header": "Estatisticas para %s", + "text.nucleoid_extras.statistics.stat": "%s: %s", + "nucleoid.navigator.all_games": "Ver jogos", + "text.nucleoid_extras.name": "Extras do Nucleoid" +} diff --git a/src/main/resources/data/nucleoid_extras/lang/ru_RU.json b/src/main/resources/data/nucleoid_extras/lang/ru_RU.json new file mode 100644 index 00000000..0e078576 --- /dev/null +++ b/src/main/resources/data/nucleoid_extras/lang/ru_RU.json @@ -0,0 +1,451 @@ +{ + "nucleoid.sidebar.player_in_game.1": "%s игрок на сервере!", + "nucleoid.sidebar.player_in_game.more": "%s игроков на сервере!", + "block.nucleoid_extras.end_portal": "Портал в Энд (только для лобби!)", + "block.nucleoid_extras.end_gateway": "Врата Энда (только для лобби!)", + "block.nucleoid_extras.contributor_statue": "Статуя участника проекта (только для лобби!)", + "block.nucleoid_extras.contributor_statue.contributor_id": "Идентификатор участника: %s", + "block.nucleoid_extras.infinite_dispenser": "Бесконечный раздатчик (только для лобби!)", + "block.nucleoid_extras.infinite_dropper": "Бесконечный выбрасыватель (только для лобби!)", + "block.nucleoid_extras.black_concrete_powder": "Парящий чёрный сухой бетон (только для лобби!)", + "block.nucleoid_extras.orange_concrete_powder": "Парящий оранжевый сухой бетон (только для лобби!)", + "block.nucleoid_extras.pink_concrete_powder": "Парящий розовый сухой бетон (только для лобби!)", + "block.nucleoid_extras.purple_concrete_powder": "Парящий фиолетовый сухой бетон (только для лобби!)", + "block.nucleoid_extras.tiny_potato": "Кроха-картоха", + "block.nucleoid_extras.irritater": "Сердитая картоха", + "block.nucleoid_extras.stone_tater": "Каменная картоха", + "block.nucleoid_extras.calcite_tater": "Кальцитовая картоха", + "block.nucleoid_extras.tuff_tater": "Туфовая картоха", + "block.nucleoid_extras.dripstone_tater": "Картоха из натечного камня", + "block.nucleoid_extras.amethyst_tater": "Аметистовая картоха", + "block.nucleoid_extras.puzzle_cube_tater": "Картоха-головоломка", + "block.nucleoid_extras.lucky_tater": "Картоха удачи", + "block.nucleoid_extras.crying_obsidian_tater": "Картоха из плачущего обсидиана", + "block.nucleoid_extras.dice_tater": "Игральная картоха", + "block.nucleoid_extras.asexual_tater": "Картоха асексуалов", + "block.nucleoid_extras.gay_tater": "Картоха геев", + "block.nucleoid_extras.lesbian_tater": "Картоха лесбиянок", + "block.nucleoid_extras.demisexual_tater": "Картоха демисексуалов", + "text.nucleoid_extras.name": "Nucleoid Extras", + "nucleoid.sidebar.welcome": "Приветствуем, %s!", + "nucleoid.sidebar.game.title": "Активные игры:", + "nucleoid.sidebar.game.title.no_games": "Нет активных игр!", + "nucleoid.sidebar.game.entry": "%s: %s", + "nucleoid.sidebar.game.more": "...и ещё %s!", + "nucleoid.sidebar.join.1": "Присоединяйтесь: %s...", + "nucleoid.sidebar.join.2": "...или используйте компас!", + "nucleoid.sidebar.game.player.1": "%s игрок", + "nucleoid.sidebar.game.player.more": "%s игроков", + "nucleoid.discord": "nucleoid.xyz/discord", + "nucleoid.stop.scheduled": "Запланирован перезапуск сервера! Сервер будет перезапущен через %s минут, или когда все игры завершатся.", + "nucleoid.stop.scheduled.already": "Перезапуск сервера уже запланирован.", + "nucleoid.stop.game.open": "Невозможно присоединиться к игре: запланирована остановка сервера!", + "nucleoid.navigator.all_games": "Все игры", + "nucleoid.navigator.open_games": "Активные игры", + "block.nucleoid_extras.gold_launch_pad": "Золотая пусковая панель (только для лобби!)", + "block.nucleoid_extras.iron_launch_pad": "Железная пусковая панель (только для лобби!)", + "block.nucleoid_extras.contributor_statue.contributor": "Участник проекта: %s", + "block.nucleoid_extras.snake_block": "Блок змейки (только для лобби!)", + "block.nucleoid_extras.fast_snake_block": "Блок быстрой змейки (только для лобби!)", + "block.nucleoid_extras.magenta_concrete_powder": "Парящий пурпурный сухой бетон (только для лобби!)", + "block.nucleoid_extras.red_concrete_powder": "Парящий красный сухой бетон (только для лобби!)", + "block.nucleoid_extras.blue_concrete_powder": "Парящий синий сухой бетон (только для лобби!)", + "block.nucleoid_extras.yellow_concrete_powder": "Парящий жёлтый сухой бетон (только для лобби!)", + "block.nucleoid_extras.brown_concrete_powder": "Парящий коричневый сухой бетон (только для лобби!)", + "block.nucleoid_extras.cyan_concrete_powder": "Парящий бирюзовый сухой бетон (только для лобби!)", + "block.nucleoid_extras.green_concrete_powder": "Парящий зелёный сухой бетон (только для лобби!)", + "block.nucleoid_extras.gray_concrete_powder": "Парящий серый сухой бетон (только для лобби!)", + "block.nucleoid_extras.light_blue_concrete_powder": "Парящий голубой сухой бетон (только для лобби!)", + "block.nucleoid_extras.white_concrete_powder": "Парящий белый сухой бетон (только для лобби!)", + "block.nucleoid_extras.light_gray_concrete_powder": "Парящий светло-серый сухой бетон (только для лобби!)", + "block.nucleoid_extras.lime_concrete_powder": "Парящий лаймовый сухой бетон (только для лобби!)", + "block.nucleoid_extras.botanical_potato": "Ботаническая кроха-картоха", + "block.nucleoid_extras.sad_tater": "Печальная картоха", + "block.nucleoid_extras.flowering_azalea_tater": "Картоха из цветущей азалии", + "block.nucleoid_extras.basalt_tater": "Базальтовая картоха", + "block.nucleoid_extras.packed_ice_tater": "Картоха из плотного льда", + "block.nucleoid_extras.blue_ice_tater": "Картоха из синего льда", + "block.nucleoid_extras.flame_tater": "Пламенная картоха", + "block.nucleoid_extras.crate_tater": "Картоха-ящик", + "block.nucleoid_extras.tater_of_undying": "Картоха бессмертия", + "block.nucleoid_extras.trans_tater": "Картоха трансгендеров", + "block.nucleoid_extras.bi_tater": "Картоха бисексуалов", + "block.nucleoid_extras.nonbinary_tater": "Картоха небинарных", + "block.nucleoid_extras.pan_tater": "Картоха пансексуалов", + "block.nucleoid_extras.genderfluid_tater": "Картоха гендерфлюидов", + "block.nucleoid_extras.warden_tater": "Картоха-хранитель", + "block.nucleoid_extras.viral_tater": "Вирусная картоха", + "block.nucleoid_extras.tateroid": "Картохароид", + "block.nucleoid_extras.red_tateroid": "Красный картохароид", + "block.nucleoid_extras.orange_tateroid": "Оранжевый картохароид", + "block.nucleoid_extras.yellow_tateroid": "Жёлтый картохароид", + "block.nucleoid_extras.santa_hat_tater": "Кроха-картоха в новогоднем колпаке", + "block.nucleoid_extras.skeletater": "Картоха-скелет", + "block.nucleoid_extras.wither_skeletater": "Картоха-визер-скелет", + "block.nucleoid_extras.zombie_tater": "Картоха-зомби", + "block.nucleoid_extras.creeper_tater": "Картоха-крипер", + "block.nucleoid_extras.steve_tater": "Картоха Стив", + "block.nucleoid_extras.alex_tater": "Картоха Алекс", + "block.nucleoid_extras.black_tater": "Чёрная картоха", + "block.nucleoid_extras.blue_tater": "Синяя картоха", + "block.nucleoid_extras.brown_tater": "Коричневая картоха", + "block.nucleoid_extras.light_blue_tater": "Голубая картоха", + "block.nucleoid_extras.light_gray_tater": "Светло-серая картоха", + "block.nucleoid_extras.lime_tater": "Лаймовая картоха", + "block.nucleoid_extras.magenta_tater": "Пурпурная картоха", + "block.nucleoid_extras.orange_tater": "Оранжевая картоха", + "block.nucleoid_extras.pink_tater": "Розовая картоха", + "block.nucleoid_extras.purple_tater": "Фиолетовая картоха", + "block.nucleoid_extras.red_tater": "Красная картоха", + "block.nucleoid_extras.white_tater": "Белая картоха", + "block.nucleoid_extras.coal_tater": "Угольная картоха", + "block.nucleoid_extras.yellow_tater": "Жёлтая картоха", + "block.nucleoid_extras.diamond_tater": "Алмазная картоха", + "block.nucleoid_extras.emerald_tater": "Изумрудная картоха", + "block.nucleoid_extras.gold_tater": "Золотая картоха", + "block.nucleoid_extras.iron_tater": "Железная картоха", + "block.nucleoid_extras.lapis_tater": "Лазуритовая картоха", + "block.nucleoid_extras.netherite_tater": "Незеритовая картоха", + "block.nucleoid_extras.quartz_tater": "Кварцевая картоха", + "block.nucleoid_extras.copper_tater": "Медная картоха", + "block.nucleoid_extras.redstone_tater": "Редстоуновая картоха", + "block.nucleoid_extras.exposed_copper_tater": "Потемневшая медная картоха", + "block.nucleoid_extras.weathered_copper_tater": "Состаренная медная картоха", + "block.nucleoid_extras.oxidized_copper_tater": "Окисленная медная картоха", + "block.nucleoid_extras.cake_tater": "Картоха-торт", + "block.nucleoid_extras.endertater": "Картоха-эндермен", + "block.nucleoid_extras.furnace_tater": "Картоха-печь", + "block.nucleoid_extras.melon_tater": "Арбузная картоха", + "block.nucleoid_extras.pumpkin_tater": "Тыквеная картоха", + "block.nucleoid_extras.jack_o_tater": "Картоха Джека", + "block.nucleoid_extras.sculk_tater": "Скалковая картоха", + "block.nucleoid_extras.slime_tater": "Картоха-слизень", + "block.nucleoid_extras.herobrine_tater": "Картоха Хиробрин", + "block.nucleoid_extras.ochre_froglight_tater": "Картоха из охристой квампы", + "block.nucleoid_extras.pearlescent_froglight_tater": "Картоха из перламутровой квампы", + "block.nucleoid_extras.verdant_froglight_tater": "Картоха из малахитовой квампы", + "block.nucleoid_extras.snowman_tater": "Картоха-снеговик", + "block.nucleoid_extras.acacia_tater": "Акациевая картоха", + "block.nucleoid_extras.andesite_tater": "Андезитовая картоха", + "block.nucleoid_extras.bamboo_tater": "Бамбуковая картоха", + "block.nucleoid_extras.bedrock_tater": "Бедроковая картоха", + "block.nucleoid_extras.birch_tater": "Берёзовая картоха", + "block.nucleoid_extras.bone_tater": "Костная картоха", + "block.nucleoid_extras.brain_coral_tater": "Картоха из коралла-мозговика", + "block.nucleoid_extras.brick_tater": "Кирпичная картоха", + "block.nucleoid_extras.bubble_coral_tater": "Картоха из пузырчатого коралла", + "block.nucleoid_extras.cactus_tater": "Кактусовая картоха", + "block.nucleoid_extras.crimson_tater": "Багровая картоха", + "block.nucleoid_extras.dark_oak_tater": "Картоха из тёмного дуба", + "block.nucleoid_extras.dark_prismarine_tater": "Картоха из тёмного призмарина", + "block.nucleoid_extras.diorite_tater": "Диоритовая картоха", + "block.nucleoid_extras.dirt_tater": "Земляная картоха", + "block.nucleoid_extras.end_stone_tater": "Эндерняковая картоха", + "block.nucleoid_extras.fire_coral_tater": "Картоха из огненного коралла", + "block.nucleoid_extras.granite_tater": "Гранитная картоха", + "block.nucleoid_extras.grass_tater": "Дерновая картоха", + "block.nucleoid_extras.hay_tater": "Сенная картоха", + "block.nucleoid_extras.honey_tater": "Медовая картоха", + "block.nucleoid_extras.honeycomb_tater": "Картоха из пчелиных сот", + "block.nucleoid_extras.horn_coral_tater": "Картоха из рогового коралла", + "block.nucleoid_extras.jungle_tater": "Картоха из тропического дерева", + "block.nucleoid_extras.mycelium_tater": "Мицелиальная картоха", + "block.nucleoid_extras.nether_wart_tater": "Картоха из незерского нароста", + "block.nucleoid_extras.oak_tater": "Дубовая картоха", + "block.nucleoid_extras.obsidian_tater": "Обсидиановая картоха", + "block.nucleoid_extras.prismarine_brick_tater": "Картоха из призмаринового кирпича", + "block.nucleoid_extras.prismarine_tater": "Призмариновая картоха", + "block.nucleoid_extras.red_sand_tater": "Картоха из красного песка", + "block.nucleoid_extras.sand_tater": "Песочная картоха", + "block.nucleoid_extras.sea_lantern_tater": "Картоха из морского фонаря", + "block.nucleoid_extras.shroomlight_tater": "Картоха из грибосвета", + "block.nucleoid_extras.soul_sand_tater": "Картоха из песка душ", + "block.nucleoid_extras.sponge_tater": "Картоха из губки", + "block.nucleoid_extras.spruce_tater": "Еловая картоха", + "block.nucleoid_extras.stone_brick_tater": "Картоха из каменного кирпича", + "block.nucleoid_extras.target_tater": "Картоха-мишень", + "block.nucleoid_extras.terracotta_tater": "Картоха из терракоты", + "block.nucleoid_extras.tntater": "Картоха из динамита", + "block.nucleoid_extras.tube_coral_tater": "Картоха из трубчатого коралла", + "block.nucleoid_extras.warped_tater": "Искажённая картоха", + "block.nucleoid_extras.warped_wart_tater": "Картоха из искажённого нароста", + "block.nucleoid_extras.wool_tater": "Шерстяная картоха", + "block.nucleoid_extras.bee_nest_tater": "Картоха из пчелиного гнезда", + "block.nucleoid_extras.bee_tater": "Картоха-пчела", + "block.nucleoid_extras.beehive_tater": "Картоха-улей", + "block.nucleoid_extras.birch_log_tater": "Картоха из берёзового бревна", + "block.nucleoid_extras.blackstone_tater": "Чернитная картоха", + "block.nucleoid_extras.brown_mooshroom_tater": "Коричневая картоха-муушрум", + "block.nucleoid_extras.brown_mushroom_tater": "Картоха из коричневого гриба", + "block.nucleoid_extras.cave_spider_tater": "Пещерная картоха-паук", + "block.nucleoid_extras.cobbled_deepslate_tater": "Картоха из колотого глубинного сланца", + "block.nucleoid_extras.cobblestone_tater": "Булыжная картоха", + "block.nucleoid_extras.cocoa_tater": "Какао-картоха", + "block.nucleoid_extras.cold_strider_tater": "Замёрзшая картоха-лавомерка", + "block.nucleoid_extras.cow_tater": "Картоха-корова", + "block.nucleoid_extras.crafting_tater": "Картоха из верстака", + "block.nucleoid_extras.crimson_nylium_tater": "Картоха из багрового нилия", + "block.nucleoid_extras.dark_oak_log_tater": "Картоха из бревна тёмного дуба", + "block.nucleoid_extras.daylight_detector_tater": "Картоха из датчика дневного света", + "block.nucleoid_extras.dead_brain_coral_tater": "Картоха из мёртвого коралла-мозговика", + "block.nucleoid_extras.dead_bubble_coral_tater": "Картоха из мёртвого пузырчатого коралла", + "block.nucleoid_extras.dead_fire_coral_tater": "Картоха из мёртвого огненного коралла", + "block.nucleoid_extras.dead_horn_coral_tater": "Картоха из мёртвого рогового коралла", + "block.nucleoid_extras.dead_tube_coral_tater": "Картоха из мёртвого трубчатого коралла", + "block.nucleoid_extras.deepslate_brick_tater": "Картоха из глубинносланцевого кирпича", + "block.nucleoid_extras.deepslate_tater": "Картоха из глубинного сланца", + "block.nucleoid_extras.fox_tater": "Картоха-лисица", + "block.nucleoid_extras.ghast_tater": "Картоха-гаст", + "block.nucleoid_extras.gilded_blackstone_tater": "Картоха из золочёного чернита", + "block.nucleoid_extras.glow_squid_tater": "Светящаяся картоха-спрут", + "block.nucleoid_extras.glowstone_tater": "Картоха из светокамня", + "block.nucleoid_extras.husk_tater": "Картоха-кадавр", + "block.nucleoid_extras.inverted_daylight_detector_tater": "Картоха из инвертированного датчика дневного света", + "block.nucleoid_extras.jungle_log_tater": "Картоха из бревна тропического дерева", + "block.nucleoid_extras.magma_cube_tater": "Магмовая картоха-куб", + "block.nucleoid_extras.muddy_pig_tater": "Заляпанная картоха-свинья", + "block.nucleoid_extras.mushroom_stem_tater": "Картоха из ножки гриба", + "block.nucleoid_extras.moobloom_tater": "Картохацвет", + "block.nucleoid_extras.nether_brick_tater": "Картоха из незерского кирпича", + "block.nucleoid_extras.netherrack_tater": "Картоха из незерака", + "block.nucleoid_extras.oak_log_tater": "Картоха из дубового бревна", + "block.nucleoid_extras.pig_tater": "Картоха-свинья", + "block.nucleoid_extras.polar_bear_tater": "Белая картоха-медведь", + "block.nucleoid_extras.puffertater": "Картохабрюх", + "block.nucleoid_extras.red_mushroom_tater": "Картоха из красного гриба", + "block.nucleoid_extras.red_nether_brick_tater": "Картоха из красного незерского кирпича", + "block.nucleoid_extras.sandstone_tater": "Песчаниковая картоха", + "block.nucleoid_extras.sea_pickle_tater": "Картоха из морского огурца", + "block.nucleoid_extras.sheep_tater": "Картоха-овца", + "block.nucleoid_extras.shielded_wither_tater": "Защищённая картоха-визер", + "block.nucleoid_extras.snow_fox_tater": "Снежная картоха-лисица", + "block.nucleoid_extras.spider_tater": "Картоха-паук", + "block.nucleoid_extras.spruce_log_tater": "Картоха из елового бревна", + "block.nucleoid_extras.squid_tater": "Картоха-спрут", + "block.nucleoid_extras.stray_tater": "Картоха-зимогор", + "block.nucleoid_extras.strider_tater": "Картоха-лавомерка", + "block.nucleoid_extras.turtle_egg_tater": "Картоха из черепашьего яйца", + "block.nucleoid_extras.warped_nylium_tater": "Картоха из искажённого нилия", + "block.nucleoid_extras.warped_stem_tater": "Картоха из искажённого стебля", + "block.nucleoid_extras.wither_tater": "Картоха-визер", + "block.nucleoid_extras.azalea_tater": "Картоха из азалии", + "block.nucleoid_extras.bell_tater": "Картоха из колокола", + "block.nucleoid_extras.cold_frog_tater": "Снежная картоха-лягушка", + "block.nucleoid_extras.conduit_tater": "Картоха из морского источника", + "block.nucleoid_extras.elder_guardian_tater": "Древняя картоха-страж", + "block.nucleoid_extras.end_stone_brick_tater": "Картоха из эндернякового кирпича", + "block.nucleoid_extras.flower_pot_tater": "Картоха из цветочного горшка", + "block.nucleoid_extras.guardian_tater": "Картоха-страж", + "block.nucleoid_extras.illager_tater": "Картоха-разбойник", + "block.nucleoid_extras.illusioner_tater": "Картоха-иллюзор", + "block.nucleoid_extras.jukebox_tater": "Картоха из проигрывателя", + "block.nucleoid_extras.villager_tater": "Картоха-крестянин", + "block.nucleoid_extras.vinditater": "Картоха-поборник", + "block.nucleoid_extras.wandering_trader_tater": "Странствующая картоха-торговец", + "block.nucleoid_extras.warm_frog_tater": "Тропическая картоха-лягушка", + "block.nucleoid_extras.wax_tater": "Восковая картоха", + "block.nucleoid_extras.zombie_villager_tater": "Картоха-зомби-крестьянин", + "block.nucleoid_extras.zombified_piglin_tater": "Зомбифицированная картоха-пиглин", + "block.nucleoid_extras.bone_spider_tater": "Костяная картоха-паук", + "block.nucleoid_extras.stripped_spruce_log_tater": "Картоха из обтёсанного елового бревна", + "block.nucleoid_extras.stripped_warped_stem_tater": "Картоха из обтёсанного искажённого стебля", + "block.nucleoid_extras.golden_apple_tater": "Золотая картоха-яблоко", + "block.nucleoid_extras.king_tater": "Картоха-король", + "block.nucleoid_extras.raw_iron_tater": "Картоха из рудного железа", + "block.nucleoid_extras.mangrove_tater": "Мангровая картоха", + "block.nucleoid_extras.mud_brick_tater": "Саманная картоха", + "block.nucleoid_extras.mud_tater": "Картоха из грязи", + "block.nucleoid_extras.packed_mud_tater": "Картоха из плотной грязи", + "block.nucleoid_extras.stripped_mangrove_log_tater": "Картоха из обтёсанного мангрового бревна", + "block.nucleoid_extras.lucy_axolotl_tater": "Лейцистическая картоха-аксолотль", + "block.nucleoid_extras.wild_axolotl_tater": "Природная картоха-аксолотль", + "block.nucleoid_extras.gold_axolotl_tater": "Золотая картоха-аксолотль", + "block.nucleoid_extras.cyan_axolotl_tater": "Голубая картоха-аксолотль", + "block.nucleoid_extras.blue_axolotl_tater": "Синяя картоха-аксолотль", + "block.nucleoid_extras.bronze_capsule_tater": "Картоха в бронзовой капсуле", + "block.nucleoid_extras.silver_capsule_tater": "Картоха в серебряной капсуле", + "block.nucleoid_extras.gold_capsule_tater": "Картоха в золотой капсуле", + "block.nucleoid_extras.corruptater.0": "НЕВЕРНОЕ ЗНАЧЕНИЕ", + "block.nucleoid_extras.corruptater.4": "missingno.", + "block.nucleoid_extras.corruptater.5": "undefined", + "block.nucleoid_extras.corruptater.6": "ArrayIndexOutOfBoundsException", + "block.nucleoid_extras.corruptater.7": ";)", + "block.nucleoid_extras.nucleoid_logo": "Логотип Nucleoid", + "item.nucleoid_extras.game_portal_opener": "Открыватель игровых порталов", + "item.nucleoid_extras.quick_armor_stand": "Быстрая стойка для брони (только для лобби!)", + "entity.nucleoid_extras.quick_armor_stand": "Быстрая стойка для брони", + "text.nucleoid_extras.tater_box.title": "%s (%s из %s картох)", + "text.nucleoid_extras.tater_box.selected": "Выбрано: %s", + "text.nucleoid_extras.tater_box.none": "Ничего", + "text.nucleoid_extras.tater_box.not_found": "Ещё не найдена!", + "text.nucleoid_extras.tater_box.hide_unfound": "Скрыть ненайденные", + "text.nucleoid_extras.statistics.list_ui": "Моя статистика", + "text.nucleoid_extras.statistics.stat": "%s: %s", + "text.nucleoid_extras.statistics.waiting": "Получение информации о статистике", + "text.nucleoid_extras.seconds": "%s секунд", + "advancements.nucleoid_extras.root.title": "Nucleoid", + "advancements.nucleoid_extras.root.description": "Достижения Nucleoid", + "advancements.nucleoid_extras.first_tater.title": "Моя первая картоха", + "advancements.nucleoid_extras.first_tater.description": "Соберите в мешок свою первую картоху.", + "advancements.nucleoid_extras.ten_taters.title": "Любитель картох", + "advancements.nucleoid_extras.twenty_five_taters.title": "Коллекционер картох", + "advancements.nucleoid_extras.ten_taters.description": "Соберите в мешок 10 картохи.", + "advancements.nucleoid_extras.fifty_taters.title": "Плюшкин по картохам", + "advancements.nucleoid_extras.fifty_taters.description": "Соберите в мешок 50 картохи.", + "advancements.nucleoid_extras.one_hundred_taters.title": "Картофельный магнат", + "advancements.nucleoid_extras.one_hundred_taters.description": "Соберите в мешок 100 картохи.", + "advancements.nucleoid_extras.two_hundred_taters.title": "Картофельный король", + "advancements.nucleoid_extras.two_hundred_taters.description": "Соберите в мешок 200 картохи.", + "advancements.nucleoid_extras.all_taters.title": "Картофельное божество", + "advancements.nucleoid_extras.pride_taters.title": "Картофельные меньшинства", + "advancements.nucleoid_extras.pride_taters.description": "Соберите в мешок все квир-картохи.", + "advancements.nucleoid_extras.copper_taters.title": "Беречь от солнечных лучей (и кислорода)", + "advancements.nucleoid_extras.copper_taters.description": "Соберите в мешок все медные картохи.", + "advancements.nucleoid_extras.dyed_taters.title": "Все цвета картохи", + "advancements.nucleoid_extras.ore_taters.description": "Соберите в мешок все картохи из металлов, минералов и горючих ископаемых.", + "advancements.nucleoid_extras.froglight_taters.title": "Кватохи", + "advancements.nucleoid_extras.wood_taters.description": "Соберите в мешок все картохи из древесины.", + "advancements.nucleoid_extras.coral_taters.description": "Соберите в мешок все картохи из кораллов.", + "advancements.nucleoid_extras.wood_taters.title": "Мудрая таинственная картоха", + "advancements.nucleoid_extras.raider_taters.title": "Тёмная сторона картохи", + "advancements.nucleoid_extras.frog_taters.description": "Соберите в мешок все картохи-лягушки.", + "advancements.nucleoid_extras.tateroids.title": "Людвиг ван Картофель", + "advancements.nucleoid_extras.tateroids.description": "Соберите в мешок все картохароиды.", + "advancements.nucleoid_extras.skeletaters.title": "ееее ккккккккартоха", + "advancements.nucleoid_extras.slime_taters.title": "Испорченный картофель", + "advancements.nucleoid_extras.raw_taters.description": "Соберите в мешок все картохи из рудного материала.", + "advancements.nucleoid_extras.ice_taters.title": "Замороженный картофель", + "advancements.nucleoid_extras.pre_classic_taters.description": "Соберите в мешок все картохи из Minecraft Pre-Classic.", + "advancements.nucleoid_extras.classic_taters.title": "Античные картохи", + "advancements.nucleoid_extras.classic_taters.description": "Соберите в мешок все картохи из Minecraft Classic.", + "advancements.nucleoid_extras.indev_taters.title": "Прорастающие картохи", + "advancements.nucleoid_extras.beta_taters.title": "Цветение картохи", + "advancements.nucleoid_extras.1_2_taters.description": "Соберите в мешок все картохи из Minecraft 1.2.", + "advancements.nucleoid_extras.1_3_taters.description": "Соберите в мешок все картохи из Minecraft 1.3.", + "advancements.nucleoid_extras.pretty_scary_taters.title": "Картохофобия", + "advancements.nucleoid_extras.redstone_taters.title": "Картофель нового поколения", + "advancements.nucleoid_extras.horse_taters.description": "Соберите в мешок все картохи из Horse Update (Minecraft 1.6).", + "advancements.nucleoid_extras.changed_the_world_taters.title": "Картохи, изменившие мир", + "advancements.nucleoid_extras.village_and_pillage_taters.description": "Соберите в мешок все картохи из Village & Pillage (Minecraft 1.14).", + "advancements.nucleoid_extras.buzzy_taters.title": "Опылённые картохи", + "advancements.nucleoid_extras.nether_taters.title": "Горячая картошка", + "advancements.nucleoid_extras.caves_and_cliffs_taters.title": "Пещеры и скалы и картохи", + "advancements.nucleoid_extras.caves_and_cliffs_taters.description": "Соберите в мешок все картохи из Caves & Cliffs (Minecraft 1.17 и 1.18).", + "advancements.nucleoid_extras.wild_taters.title": "Дикий картофель", + "advancements.nucleoid_extras.earth_taters.title": "Земляне", + "advancements.nucleoid_extras.wednesday_my_dudes.title": "Среда, мои чуваки!", + "block.nucleoid_extras.green_tater": "Зелёная картоха", + "block.nucleoid_extras.gray_tater": "Серая картоха", + "block.nucleoid_extras.green_tateroid": "Зелёный картохароид", + "block.nucleoid_extras.blue_tateroid": "Синий картохароид", + "block.nucleoid_extras.purple_tateroid": "Фиолетовый картохароид", + "block.nucleoid_extras.upward_tater": "Направленная вверх картоха", + "block.nucleoid_extras.cyan_tater": "Бирюзовая картоха", + "block.nucleoid_extras.clay_tater": "Глиняная картоха", + "block.nucleoid_extras.flipped_tater": "Перевёрнутая картоха", + "block.nucleoid_extras.backward_tater": "Направленная назад картоха", + "block.nucleoid_extras.chorus_tater": "Хорусовая картоха", + "block.nucleoid_extras.acacia_log_tater": "Картоха из акациевого бревна", + "block.nucleoid_extras.angry_bee_tater": "Злая картоха-пчела", + "block.nucleoid_extras.beacon_tater": "Картоха-маяк", + "block.nucleoid_extras.blaze_tater": "Картоха-всполох", + "block.nucleoid_extras.podzol_tater": "Подзольная картоха", + "block.nucleoid_extras.bookshelf_tater": "Картоха из книжной полки", + "block.nucleoid_extras.crimson_stem_tater": "Картоха из багрового стебля", + "block.nucleoid_extras.drowned_tater": "Картоха-утопленник", + "block.nucleoid_extras.eye_of_ender_tater": "Картоха-око Эндера", + "block.nucleoid_extras.shulker_tater": "Картоха-шалкер", + "block.nucleoid_extras.smooth_stone_tater": "Картоха из гладкого камня", + "block.nucleoid_extras.dried_kelp_tater": "Картоха из сушёной ламинарии", + "block.nucleoid_extras.temperate_frog_tater": "Болотная картоха-лягушка", + "block.nucleoid_extras.underwater_tntater": "Картоха из подводного динамита", + "block.nucleoid_extras.red_sandstone_tater": "Картоха из красного песчаника", + "block.nucleoid_extras.ruby_tater": "Рубиновая картоха", + "block.nucleoid_extras.red_mooshroom_tater": "Красная картоха-муушрум", + "block.nucleoid_extras.soul_lantern_tater": "Картоха из фонаря душ", + "block.nucleoid_extras.sticky_piston_tater": "Картоха из липкого поршня", + "block.nucleoid_extras.vex_tater": "Картоха-вредина", + "block.nucleoid_extras.lantern_tater": "Картоха из фонаря", + "block.nucleoid_extras.piglin_tater": "Картоха-пиглин", + "block.nucleoid_extras.pink_wither_tater": "Розовая картоха-визер", + "block.nucleoid_extras.piston_tater": "Картоха из поршня", + "block.nucleoid_extras.purpur_tater": "Пурпуровая картоха", + "block.nucleoid_extras.soul_soil_tater": "Картоха из почвы душ", + "block.nucleoid_extras.witch_tater": "Картоха-ведьма", + "block.nucleoid_extras.lobber_zombie_tater": "Гниющая картоха-зомби", + "block.nucleoid_extras.bouldering_zombie_tater": "Лазающая картоха-зомби", + "block.nucleoid_extras.charged_creeper_tater": "Заряженная картоха-крипер", + "block.nucleoid_extras.stripped_acacia_log_tater": "Картоха из обтёсанного акациевого бревна", + "block.nucleoid_extras.stripped_dark_oak_log_tater": "Картоха из обтёсанного бревна тёмного дуба", + "block.nucleoid_extras.mossy_skeletater": "Замшелая картоха-скелет", + "block.nucleoid_extras.raw_copper_tater": "Картоха из рудной меди", + "block.nucleoid_extras.mangrove_log_tater": "Картоха из мангрового бревна", + "block.nucleoid_extras.stripped_birch_log_tater": "Картоха из обтёсанного берёзового бревна", + "block.nucleoid_extras.stripped_crimson_stem_tater": "Картоха из обтёсанного багрового стебля", + "block.nucleoid_extras.stripped_jungle_log_tater": "Картоха из обтёсанного бревна тропического дерева", + "block.nucleoid_extras.stripped_oak_log_tater": "Картоха из обтёсанного дубового бревна", + "block.nucleoid_extras.tropical_slime_tater": "Тропическая картоха-слизень", + "block.nucleoid_extras.apple_tater": "Картоха-яблоко", + "block.nucleoid_extras.raw_gold_tater": "Картоха из рудного золота", + "block.nucleoid_extras.ice_tater": "Картоха изо льда", + "block.nucleoid_extras.allay_tater": "Картоха-тихоня", + "block.nucleoid_extras.corruptater.2": "block.nucleoid_extras.tiny_potato", + "block.nucleoid_extras.corruptater.3": "tile.tiny_potato.name<", + "block.nucleoid_extras.safe_tnt": "Безопасный динамит (только для лобби!)", + "item.nucleoid_extras.launch_feather": "Пусковое перо", + "text.nucleoid_extras.tater_box.completion": "%s из %s картох (%s%%)", + "text.nucleoid_extras.tater_box.not_owner": "Это не ваш мешок с картохами!", + "text.nucleoid_extras.contributor_statue.title": "Выбор участника", + "text.nucleoid_extras.statistics.web_url": "Нажмите здесь, чтобы посмотреть статистику по этой игре!", + "block.nucleoid_extras.corruptater.1": "ПОВРЕЖДЕНО", + "item.nucleoid_extras.tater_box": "Мешок с картохами", + "text.nucleoid_extras.tater_box.added": "%s добавлена в мешок!", + "text.nucleoid_extras.tater_box.already_added": "%s уже в мешке!", + "advancements.nucleoid_extras.twenty_five_taters.description": "Соберите в мешок 25 картохи.", + "text.nucleoid_extras.lobby_items": "Не используйте этот блок вне лобби!", + "text.nucleoid_extras.lobby_only": "(только для лобби!)", + "text.nucleoid_extras.tater_box.show_unfound": "Показать ненайденные", + "text.nucleoid_extras.tater_box.updated": "Ваш мешок обновлён на новый формат! Картоха теперь в безопасности!", + "text.nucleoid_extras.statistics.bundle_header": "Статистика %s", + "advancements.nucleoid_extras.froglight_taters.description": "Соберите в мешок все картохи из квамп.", + "advancements.nucleoid_extras.zombie_taters.title": "Картошка вместо мозгов", + "advancements.nucleoid_extras.dyed_taters.description": "Соберите в мешок все крашеные картохи.", + "advancements.nucleoid_extras.zombie_taters.description": "Соберите в мешок все картохи-зомби.", + "advancements.nucleoid_extras.slime_taters.description": "Соберите в мешок все картохи-слизни.", + "advancements.nucleoid_extras.raw_taters.title": "Необработанный картофель", + "advancements.nucleoid_extras.ice_taters.description": "Соберите в мешок все ледяные картохи.", + "advancements.nucleoid_extras.all_taters.description": "Соберите каждую картоху в мешок!", + "advancements.nucleoid_extras.raider_taters.description": "Соберите в мешок все картохи рейда.", + "advancements.nucleoid_extras.adventure_taters.description": "Соберите в мешок все картохи из Adventure Update (Minecraft Beta 1.8 и 1.0).", + "advancements.nucleoid_extras.frog_taters.title": "Царевна-картошка", + "advancements.nucleoid_extras.ore_taters.title": "Картофолиты", + "advancements.nucleoid_extras.coral_taters.title": "Карл у Клары украл картохи", + "advancements.nucleoid_extras.skeletaters.description": "Соберите в мешок все картохи-скелеты.", + "advancements.nucleoid_extras.bountiful_taters.title": "Изобилие картохи", + "advancements.nucleoid_extras.axolotl_taters.description": "Соберите в мешок все картохи-аксолотли.", + "advancements.nucleoid_extras.alpha_taters.title": "Альфа-картохи", + "advancements.nucleoid_extras.adventure_taters.title": "Всё ещё в ожидании беты 1.9", + "advancements.nucleoid_extras.pretty_scary_taters.description": "Соберите в мешок все картохи из Pretty Scary Update (Minecraft 1.4). В этом обновлении добавили картофель!", + "advancements.nucleoid_extras.beta_taters.description": "Соберите в мешок все картохи из Minecraft Beta 1.0 — Beta 1.7.", + "advancements.nucleoid_extras.changed_the_world_taters.description": "Соберите в мешок все картохи из Update that Changed the World (Minecraft 1.7).", + "advancements.nucleoid_extras.bountiful_taters.description": "Соберите в мешок все картохи из Bountiful Update (Minecraft 1.8).", + "advancements.nucleoid_extras.pre_classic_taters.title": "Первобытные картохи", + "advancements.nucleoid_extras.indev_taters.description": "Соберите в мешок все картохи из Minecraft Indev и Infdev.", + "advancements.nucleoid_extras.alpha_taters.description": "Соберите в мешок все картохи из Minecraft Alpha.", + "advancements.nucleoid_extras.redstone_taters.description": "Соберите в мешок все картохи из Redstone Update (Minecraft 1.5).", + "advancements.nucleoid_extras.combat_taters.title": "Картоха x Картоха", + "advancements.nucleoid_extras.aquatic_taters.title": "Аквакартоха", + "advancements.nucleoid_extras.aquatic_taters.description": "Соберите в мешок все картохи из Update Aquatic (Minecraft 1.13).", + "advancements.nucleoid_extras.combat_taters.description": "Соберите в мешок все картохи из Combat Update (Minecraft 1.9).", + "advancements.nucleoid_extras.frostburn_taters.description": "Соберите в мешок все картохи из Frostburn Update (Minecraft 1.10).", + "advancements.nucleoid_extras.frostburn_taters.title": "Замороженный картофель фри", + "advancements.nucleoid_extras.exploration_taters.title": "Картоха-путешественница", + "advancements.nucleoid_extras.village_and_pillage_taters.title": "Картоха деревни", + "advancements.nucleoid_extras.buzzy_taters.description": "Соберите в мешок все картохи из Buzzy Bees (Minecraft 1.15).", + "advancements.nucleoid_extras.nether_taters.description": "Соберите в мешок все картохи из Nether Update (Minecraft 1.16).", + "advancements.nucleoid_extras.wild_taters.description": "Соберите в мешок все картохи из The Wild Update (Minecraft 1.19).", + "advancements.nucleoid_extras.exploration_taters.description": "Соберите в мешок все картохи из Exploration Update (Minecraft 1.11).", + "advancements.nucleoid_extras.earth_taters.description": "Соберите в мешок все картохи из Minecraft Earth.", + "advancements.nucleoid_extras.wednesday_my_dudes.description": "Наденьте картоху-лягушку в среду (по серверному времени!).", + "advancements.nucleoid_extras.axolotl_taters.title": "Картофельный аксолют" +} diff --git a/src/main/resources/extras.mixins.json b/src/main/resources/extras.mixins.json index 15af2e87..91315323 100644 --- a/src/main/resources/extras.mixins.json +++ b/src/main/resources/extras.mixins.json @@ -10,7 +10,9 @@ "ServerWorldAccessor", "TextSerializerMixin", "lobby.ArmorStandEntityAccessor", + "lobby.LivingEntityAccessor", "lobby.ServerPlayerEntityMixin", + "lobby.ThreadedAnvilChunkStorageAccessor", "patches.EntityMixin", "patches.StatusEffectMixin", "player_list.PlayerInteractionManagerMixin",